防止将SOAP消息与内容类型一起发送为“multipart / related”

时间:2012-08-20 19:37:27

标签: soap http-headers ibm-rad

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

据我所知,区别在于正在发送的HTTP标头。

RAD生成的客户端:


POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
Host: http://host.com/ws/mycompany/webservice/SomeWebServiceName/soap11
Accept: application/soap+xml,multipart/related,text/*
User-Agent: IBM WebServices/1.0
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Connection: Keep-Alive
SAVECONNECTION: 7814631881345232300226
IBM-WAS-CLIENT: TRUE
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773; type="application/xop+xml"; start=""; start-info="text/xml"
Content-Length: 2553
Date: Fri, 17 Aug 2012 19:38:20 GMT

--MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: 

<soapenv:Envelope...
--MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773--

对于SoapUI:

POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
Content-Length: 2732
Host: localhost:9111
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soapenv:Envelope...

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

POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1
User-Agent: Jakarta Commons-HttpClient/3.1
Transfer-Encoding: chunked
Host: localhost:9111

8da
<soapenv:Envelope... 
0

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

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

1 个答案:

答案 0 :(得分:1)

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

我将代码更改为:

    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