Prevent a SOAP message from being sent with content-type as “multipart/related”

谁说胖子不能爱 提交于 2019-12-10 23:43:25

问题


I am sending a SOAP message from a webservice client (code was generated by IBM RAD 7.5) to a host, and it with a webservice fault and a message that in the hosts' log reads as "content not allowed in prolog". When I send the same content with SoapUI or a simple apache HttpClient test client, the message is received and processed by the host, and I get the expected response.

As far as I can tell, the difference is in the HTTP headers that are being sent.

RAD-generated client:


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--

For 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...

And a very simple client implemented using 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

As far as I can tell, the difference between these three is that the request generated by by the RAD-generated client has a content-type "multipart" and defines a MIME boundary. I don't have access to the host system but it seems that the host is not able to handle multipart messages.

Is there a way to force the IBM client code to send the message as simply as SoapUI or the HttpClient?


回答1:


It looks like the problem was setting MTOM to true in the BindingProvider.

I changed my code to this:

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

And everything worked fine. I think MTOM was set to true because other clients in the application needed it and this code looks like it was based on the other clients' code. Since this web service call doesn't actually need MTOM, turning it off was no problem.

Also, see: http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_enablemtom.html



来源:https://stackoverflow.com/questions/12043991/prevent-a-soap-message-from-being-sent-with-content-type-as-multipart-related

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!