【问题标题】:Disable MTOM on SOAP WS response在 SOAP WS 响应上禁用 MTOM
【发布时间】:2019-04-25 09:25:41
【问题描述】:

我有一个用java 开发的soap web 服务,它在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 编码?

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

谢谢。

【问题讨论】:

    标签: soap jboss response mtom


    【解决方案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>
    ....
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 1970-01-01
        • 2021-05-27
        • 2013-08-11
        • 2016-04-08
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        相关资源
        最近更新 更多