在 SOAP WS 响应上禁用 MTOM

Disable MTOM on SOAP WS response

我有一个 soap 网络服务,是在 java 中开发的,它 returns 在 XML 响应的标记内有一个文件。标记设置为 type="xsd:base64Binary"。相同的软件部署到两台不同的服务器上,一台 运行 一台 JBoss AS 7.1.1 一台 运行 一台 JBoss EAP 7.0.0.

检查响应(例如使用 Soap UI),AS returns 文件的 Base64 编码,直接在标签内:

<originalDocument>JVBERi0xLj...</originalDocument>

EAP returns 一个二进制文件,在标签 (MTOM) 内有引用:

--uuid:6ec7448a-58a6-4045-9faf-2b8469edf8b5
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
....
<originalDocument>
   <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:84d45c72-2b46-4d8c-9a4d-8bcc0c9206b5-13@cxf.apache.org"/>
</originalDocument>
....
--uuid:6ec7448a-58a6-4045-9faf-2b8469edf8b5
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <84d45c72-2b46-4d8c-9a4d-8bcc0c9206b5-13@cxf.apache.org>
%PDF-1.4
...

这是JBoss的配置吗?或者也许是 Apache 配置?如何强制AS使用Base64编码?

请注意,我指的是端点的响应不是来自客户端的请求。 另请注意,软件是相同的。我想要服务器配置,而不是软件更改。

谢谢。

我找到了适合我的解决方案。使用@XmlInlineBinaryData 注释我的响应类型中的相应字段强制响应内联:

public class MyResponseType {

    @XmlElement(required = true)
    protected String systemLink;

    protected Long fileSize;

    @XmlInlineBinaryData
    protected byte[] md5Hash;

我现在的回复是这样的:

<ns3:MyResponse>
     <systemLink>system://40278824</systemLink>
     <fileSize>3537</fileSize>
     <md5Hash>oY6Mq54Zgo76VYtxHeVH6w==</md5Hash>
....

我的解决方案是从 XSD 节点中删除 xmime:expectedContentTypes="application/octet-stream",并删除 @MTOM 注释。这样输出总是 base64。我仍然不明白为什么在旧的应用程序服务器上输出是 base64,即使有 @MTOM 注释。