环顾四周并尝试不同的建议解决方案后,我正在写这篇文章。建议从MTOM /非MTOM SOAP消息中提取二进制数据的两种最常见的解决方案是:
我面临的问题是我的客户端指示SOAP响应消息是MTOM [我使用消息上下文实例的isDoingMTOM()方法确定了这一点]。但是,没有包含'href'属性的OMElement节点。在打印SOAP信封时,我发现二进制数据在主体内部呈现。所以我尝试使用OMText节点方法来获取数据,但每当我尝试将OMElement转换为相应的OMText节点时,我都会遇到classCastException。
有人可以指出我错过了什么吗?
答案 0 :(得分:1)
如何打印出SOAPEnvelope Axiom对象?如果你正在调用toString()方法,这有一些不幸的副作用。具体来说,toString()方法将导致Axiom解析底层SOAP消息,并构建表示原始XML的Axiom Object图(OMElement节点等)。在构建Object图时,Axiom可能会稍微改变XML的表示形式:
以下是来自Axiom网站的链接,其中讨论了toString()的行为: http://ws.apache.org/axiom/userguide/ch05.html#d0e1111
特别是对于MTOM消息,当Axiom构建Object图时,它将用原始二进制文件的Base64编码文本表示替换指向原始二进制MTOM附件的元素 - 有效地消除了使用MTOM的任何好处( MTOM允许您放弃Base64编码过程,该过程膨胀二进制文件的大小。如果你在调试器中查看Axiom Object图,也会发生元素的替换(因为这样做也会调用toString()方法)。
您使用ADB作为XML绑定框架吗?