在 WebSphere SOAP XOP 中,附件引用被替换为附件 base64 值

问题描述

我面临以下问题: 发送带有 MTOM 附件的 saaj 请求时,原始请求正文如下所示

<soapenv:Body>
   <ns1:UploadMsgRq>
      <ns2:Attachment><xop:Include href="cid:testfile.xml" xmlns:xop="http://www.w3.org/2004/08/xop/include"/></ns2:Attachment>           
   </ns1:UploadMsgRq>
</soapenv:Body>>

附件标签值被转换为

<ns2:Attachment>PHN0YXJ0Pkdhc3Nlcjwvc3RhcnQ+</ns2:Attachment>

这是我的附件的 base64 值,我不希望发生这种情况,特别是附件已作为 MTOM 部分添加。 同样的代码在 JBOSS 上也能正常工作。

我应该在 websphere 上进行特殊处理吗?

解决方法

这是我找到的解决方案:

  1. 删除 SAAJ 客户端并从 WSDL 生成客户端,这将自动保持 XOP:Include 原样。
  2. 保留 SAAJ 客户端,但对于包含标记,您必须执行以下操作之一 a) 确保包含标记的内容中有一个空格 <xop:Include href="cid:testfile.xml" xmlns:xop="http://www.w3.org/2004/08/xop/include"> </xop:Include> 或 b) 使用 addChildElement 动态添加它。对于 a 和 b,您的处理程序(如果有)不应调用 context.getMessage() 否则它将再次生成 bas64。