在 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 注释。
我有一个 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 注释。