从 mule esb 使用 .NET ASMX Web 服务会抛出 CXF 异常:401 Unauthorized

2023-12-29

我在另一台服务器上有一个 .NET ASMX Web 服务,并且在另一台服务器上安装了 mule 独立 CE 3.4。我有一个非常简单的流程,需要调用这个 .NET Web 服务并传递两个字符串参数。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd">
    <custom-transformer returnClass="java.lang.String[]" mimeType="text/plain" class="com.rms.corpapps.utils.WebServiceParamsTransformer" name="Java" doc:name="Java"/>
<http:connector name="httpConnector" enableCookies="true" proxyHostname="myserver" proxyUsername="domain\myusername" proxyPassword="mypassword" proxyPort="80" >
    <spring:property name="proxyNtlmAuthentication" value="true"/>
</http:connector>
<flow name="sftestFlow1" doc:name="sftestFlow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="flows/sftest"/>
    <custom-transformer class="com.mycompany.utils.WebServiceParamsTransformer" doc:name="Transform Data for web service" doc:description="This java component prepares the input for web service"/>
    <cxf:jaxws-client doc:name="SOAP"
        clientClass="com.mycompany.WebServiceListener" port="WebServiceListenerSoap"  operation="ProcessExternalMessage"
    />
    <outbound-endpoint address="http://myserver/sm/webservicelistener.asmx?wsdl" doc:name="Generic" exchange-pattern="request-response" connector-ref="httpConnector"/>
</flow>

基本上,我公开一个 http 入站端点(用于测试目的)来调用流程,并使用 java 转换器类返回需要传递到 Web 服务的字符串。以下是 WebServiceParamsTransformer 类的代码。

public class WebServiceParamsTransformer extends AbstractTransformer {
    @Override
    public Object doTransform(Object src, String encoding) throws TransformerException {
        Object[] out = new Object[2];
    out[0] = "Update Ticket Service";
    out[1] = Base64.encode("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><event source=\"SHUB\" target=\"TP\" type=\"SUB8\" version=\"1.0\" timestamp=\"2013-09-16T15:52:14.0000+00.00\"><new-eta-event><incident-number>123456</incident-number><user-name>hari</user-name><eta-timestamp>2013-09-16T15:52:14.0000+00.00</eta-timestamp></new-eta-event></event>");

    return out;
    }
}

不幸的是,这不起作用 - 我收到以下错误“响应代码:401。未经授权”。以下是错误日志的摘录:

INFO  2013-09-17 13:54:13,396 [[sftest].httpConnector.receiver.02] org.apache.commons.httpclient.auth.AuthChallengeProcessor: **ntlm authentication scheme selected**
INFO  2013-09-17 13:54:13,397 [[sftest].httpConnector.receiver.02] org.apache.commons.httpclient.HttpMethodDirector: **No credentials available for NTLM <any realm>@myserver:80**
INFO  2013-09-17 13:54:13,397 [[sftest].httpConnector.receiver.02] org.mule.transport.http.HttpClientMessageDispatcher: **Received a redirect, but followRedirects=false. Response code: 401 Unauthorized**
WARN  2013-09-17 13:54:13,398 [[sftest].httpConnector.receiver.02] org.apache.cxf.phase.PhaseInterceptorChain: Interceptor for {http://tempuri.org/}WebServiceListener#{http://tempuri.org/}ProcessExternalMessage has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType.  Incoming portion of HTML stream: **You do not have permission to view this directory or page.**

.NET Web 服务由 Windows 集成身份验证保护,并在 .NET Framework 2.0 中的 Windows Server 2008 下的 IIS 7 中运行。这是显示身份验证设置的屏幕截图。

我哪里做错了?我的要求是简单地调用由 mule esb 的集成身份验证保护的 Web 服务。任何帮助深表感谢。


出现这种情况是由于身份验证异常。

<cxf:jaxws-client operation="Get_Workers"
            clientClass="com.saba.workday.ws.human_resources.HumanResourcesService"
            port="Human_Resources" wsdlLocation="classpath:Human_Resources.wsdl"
            doc:name="Get_Workers">
            <cxf:outInterceptors>
                <spring:ref bean="CredentialsSupplierBean" />
            </cxf:outInterceptors>
        </cxf:jaxws-client>

这里的 Credential Supply 是一个扩展 WSS4JOutInterceptor 的 bean。并进行身份验证。

凭证供应商:

public class CredentialsSupplier extends WSS4JOutInterceptor {

 public CredentialsSupplier() {
    setProperty("action", "UsernameToken");
    setProperty("passwordType", "PasswordText");
 }

    @Override
    public void handleMessage(SoapMessage message) {
        super.handleMessage(prepareHandleMessage(message));
    }

    protected SoapMessage prepareHandleMessage(SoapMessage message) {
            message.setContextualProperty("user", "username");
            message.setContextualProperty("password", "pswd");
        return message;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 mule esb 使用 .NET ASMX Web 服务会抛出 CXF 异常:401 Unauthorized 的相关文章

  • 我们什么时候应该在.NET中使用NativeMemory.Alloc()? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 NET6 C 引入NativeMemory类 但我不知道什么时候应该使用NativeMemory Alloc 而不是普通的数组实例化
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • Mule/码头设置

    我有一个正在运行的 Mule 应用程序 我想在其上设置 Jetty 来响应 http 请求 以下配置
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne
  • Java的hashCode可以为不同的字符串产生相同的值吗?

    使用java的哈希码函数是否可以为不同的字符串提供相同的哈希码 或者如果可能的话 其可能性的 是多少 Java 哈希码是 32 位 它散列的可能字符串的数量是无限的 所以是的 会发生冲突 百分比是没有意义的 项目 字符串 的数量是无限的 而
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我
  • 来自用户定义文字的整数字符序列,以字符串作为参数

    目前 只有双精度数可以在用户定义的文字中生成字符模板 template
  • C# XML 反序列化。将节点中的所有内部文本读取到字符串属性中

    我目前正在尝试修改我的类 以便我的模型上的文本属性包含某个节点的所有内部文本 text node 给我带来问题的 xml 示例是
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 日期时间解析异常

    解析日期时 我的代码中不断出现异常错误 日期看起来像这样 Wed May 21 00 00 00 EDT 2008 这是尝试读取它的代码 DateTimeFormatter formatter DateTimeFormatter ofPat
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • 如何使用 Spring AOP 建议静态方法?

    在执行类的静态方法之前和之后需要完成一些日志记录 我尝试使用 Spring AOP 来实现这一点 但它不起作用 而对于正常方法来说它起作用 请帮助我理解如何实现这一点 如果可以使用注释来完成 那就太好了 也许您应该在使用 Spring AO
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐