防止自由内容类型中的肥皂响应:多部分/相关



我们当前在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)中,它的行为不同。我将尝试保持更新。

最新更新