在SOAP WS响应上禁用MTOM

时间:2018-11-22 16:44:39

标签: soap jboss response mtom

我有一个用Java开发的肥皂网络服务,该服务返回XML响应标签内的文件。标记设置为type =“ xsd:base64Binary”。相同的软件被部署到两台不同的服务器上,一台运行JBoss AS 7.1.1,另一台运行JBoss EAP 7.0.0。

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

<originalDocument>JVBERi0xLj...</originalDocument>

EAP返回一个二进制文件,在标记(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编码?

请注意,我指的是端点的响应,而不是客户端的请求。 并且请注意,软件是相同的。我想进行服务器配置,而不是软件更改。

谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了适合我的解决方案。用@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>
....

答案 1 :(得分:0)

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