我有一个用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编码?
请注意,我指的是端点的响应,而不是客户端的请求。 并且请注意,软件是相同的。我想进行服务器配置,而不是软件更改。
谢谢。
答案 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。