我们当前在WAS8上运行的应用程序。现在,我们将此应用迁移到自由。当前,我们有一个问题,即该应用程序的肥皂响应是内容类型multipart/related
的问题。看起来这样:
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.1
Content-Type: multipart/related; type="application/soap+xml"; boundary="uuid:acacdbe0-a9a8-46cc-aedf-58570a630ff7"; start="<root.message@cxf.apache.org>"; start-info="application/soap+xml"
Content-Language: en-DE
Content-Length: 670
Date: Thu, 28 Sep 2017 12:00:16 GMT
--uuid:acacdbe0-a9a8-46cc-aedf-58570a630ff7
Content-Type: text/xml; charset=UTF-8; type="application/soap+xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
<soap:Envelope>....</soap:Envelope>
--uuid:acacdbe0-a9a8-46cc-aedf-58570a630ff7--
这对我们不利,因为其他客户可能会遇到解析问题。
使用WAS8,响应是内容类型application/soap+xml;charset=UTF-8;action="mySoapResponse"
,没有uuid
和其他内容。
在这里,我发现了类似于我的问题的东西,但不是完全。我们也已经定义了SOAPBinding
,但是作为我的@WebService
的注释看起来像: @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
或@BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
要使该应用程序在Liberty上工作,我们必须从版本 2.4 > 3.0 更新部署描述符( web.xml )。我想这也改变了应用程序的行为。
主要原因是因为SOAPBinding
注释还是其他原因?
更新:这是WAS8应用程序服务器的响应:
HTTP/1.1 200 OK
Date: Wed, 04 Oct 2017 06:24:22 GMT
Cache-Control: private
Cache-Control: max-age=10
X-Frame-Options: SAMEORIGIN
X-Powered-By: Servlet/3.0
Content-Length: 403
Keep-Alive: timeout=20
Connection: Keep-Alive
Content-Type: application/soap+xml; charset=UTF-8; action="mySoapResponse"
Content-Language: en-US
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope ...>...</soapenv:Envelope>
update2:
我注意到自由肥皂响应也会得到不在WAS8响应中的<env:header>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope"/>
<soap:Body>...
因此,背景似乎有些事情正在发生。我查看了WSDL,但是没有定义的标头或某些 multipart 。我如何追溯步骤,看看对我的响应进行此设置的位置?
也许Liberty自动使用MTOM。如果您在肥皂信封中看到<xop:Include..
,则可能是MTOM。您可能可以通过向Web服务添加注释来将其关闭,@MTOM(enabled="false")
根据IBM的支持, cxf (自由)的这种行为是由于我的 jaxb类之一中的注释@XmlAttachmentRef
。删除这将导致非多部分响应。不幸的是,当我这样做时,发送的附件将无法正确处理,并且MIME类型将丢失。
当前,我们对此进行了IBM支持,如果可以以某种方式在 cxf (Liberty)中以某种方式修复,因为在 axis2 (twas8.0)中,它的行为不同。我将尝试保持更新。