2

我正在从 web 服务客户端(代码由 IBM RAD 7.5 生成)向主机发送 SOAP 消息,并且它带有 web 服务故障,并且主机日志中的消息读取为“prolog 中不允许的内容”。当我使用 SoapUI 或简单的 apache HttpClient 测试客户端发送相同的内容时,主机会接收并处理消息,并得到预期的响应。

据我所知,不同之处在于正在发送的 HTTP 标头。

RAD 生成的客户端:

POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
主机:http://host.com/ws/mycompany/webservice/SomeWebServiceName/soap11
接受:application/soap+xml,multipart/related,text/*
用户代理:IBM WebServices/1.0
缓存控制:无缓存
Pragma:无缓存
SOAPAction:“”
连接:保持活动
保存连接:7814631881345232300226
IBM-WAS-CLIENT:是的
内容类型:多部分/相关;边界=MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773;类型=“应用程序/xop+xml”;开始=“”;开始信息=“文本/xml”
内容长度:2553
日期:格林威治标准时间 2012 年 8 月 17 日星期五 19:38:20

--MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773
内容类型:application/xop+xml;字符集=UTF-8;类型=“文本/xml”
内容传输编码:二进制
内容 ID:

<soapenv:信封...
--MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773--

对于 SoapUI:

POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
接受编码:gzip,deflate
内容类型:文本/xml;charset=UTF-8
SOAPAction:“”
内容长度:2732
主机:本地主机:9111
连接:保持活动
用户代理:Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:信封...

还有一个使用 apache HttpClient 实现的非常简单的客户端:

POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
用户代理:Jakarta Commons-HttpClient/3.1
传输编码:分块
主机:本地主机:9111

8da
<soapenv:信封...
0

据我所知,这三者之间的区别在于,由 RAD 生成的客户端生成的请求具有内容类型“多部分”并定义了 MIME 边界。我无权访问主机系统,但主机似乎无法处理多部分消息。

有没有办法强制 IBM 客户端代码像 SoapUI 或 HttpClient 一样简单地发送消息?

4

1 回答 1

1

看起来问题是true在 BindingProvider 中将 MTOM 设置为。

我将代码更改为:

    SOAPBinding soapBinding = (SOAPBinding) bindProvider.getBinding();
    soapBinding.setMTOMEnabled(false);

一切正常。我认为 MTOM 设置为true是因为应用程序中的其他客户端需要它,并且此代码看起来像是基于其他客户端的代码。由于此 Web 服务调用实际上不需要 MTOM,因此将其关闭是没有问题的。

另请参阅:http ://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_enablemtom.html

于 2012-08-23T20:20:28.353 回答