【问题标题】:Axis2/Axiom handling SOAP MTOM/non-MTOM attachmentsAxis2/Axiom 处理 SOAP MTOM/非 MTOM 附件
【发布时间】:2011-04-21 07:34:22
【问题描述】:

在环顾四周并尝试了不同的建议解决方案后,我正在写这篇文章。建议从 MTOM/非 MTOM SOAP 消息中提取二进制数据的 2 个最常见的解决方案是:

  1. 检索 OMText 节点,并使用其中的 dataHandler 实例
  2. 找到包含“href”属性的 OMElement 节点。获取“cid:xxxxx”值,并使用“xxxxx”部分从消息上下文实例中的附件映射中检索附件。

我面临的问题是我的客户端指示 SOAP 响应消息是 MTOM [我使用消息上下文实例的 isDoingMTOM() 方法确定了这一点]。但是,没有包含“href”属性的 OMElement 节点。在打印 SOAP 信封时,我发现二进制数据内嵌在正文中。所以我尝试了 OMText 节点的方法来获取数据,但是每当我尝试将 OMElement 强制转换为相应的 OMText 节点时,我都会不断收到一个 classCastException。

有人能指出我错过了什么吗?

【问题讨论】:

    标签: jakarta-ee axis2 mtom


    【解决方案1】:

    您如何打印出 SOAPEnvelope Axiom 对象?如果您正在调用 toString() 方法,这会产生一些不幸的副作用。具体来说,toString() 方法将导致 Axiom 解析底层 SOAP 消息,并构建表示原始 XML 的 Axiom 对象图(OMElement 节点等)。在构建对象图时,Axiom 可能会稍微改变 XML 的表示:

    这是来自 Axiom 网站的链接,其中讨论了 toString() 的行为: http://ws.apache.org/axiom/userguide/ch05.html#d0e1111

    特别是对于 MTOM 消息,当 Axiom 正在构建对象图时,它将用原始二进制的 Base64 编码文本表示替换指向原始二进制 MTOM 附件的元素——实际上消除了使用 MTOM 的任何好处( MTOM 允许您放弃导致二进制文件大小膨胀的 Base64 编码过程)。如果您在调试器中查看 Axiom 对象图,元素的替换也会发生(因为这样做也会调用 toString() 方法)。

    您是否使用 ADB 作为您的 XML 绑定框架?

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2012-07-15
      • 2012-08-05
      • 2012-09-07
      • 2011-02-18
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多