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

Posted

技术标签:

【中文标题】在 WebSphere SOAP XOP 中,附件引用被替换为附件 base64 值【英文标题】:In WebSphere SOAP XOP attachments references are replaced with the attachment base64 value 【发布时间】:2021-06-10 07:28:53 【问题描述】:

我面临以下问题: 发送带有 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 中我应该做一些特殊的处理吗?

【问题讨论】:

当我使用以下符号 cid:testfile.xml 时,它不会改变,但服务提供商坚持使用 xop:include 格式跨度> 【参考方案1】:

这是我找到的解决方案:

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

【讨论】:

以上是关于在 WebSphere SOAP XOP 中,附件引用被替换为附件 base64 值的主要内容,如果未能解决你的问题,请参考以下文章

基于 Websphere 的 SOAP over JMS 示例

在 Swift 中解析多部分 SOAP 响应

Websphere Application Server异常ADMC0016E:系统无法创建SOAP连接器以连接到主机端口

WireMock中的SOAP附件

axis2 mtom mime 边界

在 C# 中,如何为 Praxedo 业务事件附件管理器创建 SOAP 集成?