如何从SOAPBody获取原始xml?也许一些util函数只会给我Body xml(不是正文)。我不想重新发明代码来遍历每个节点/子节点 - 它可能已经存在于某些工具中?
Camel flow有一个dataconverter“soapjxb”,但我不需要映射/解组到java对象。
为什么我需要?:清理操作
其中一个客户端应用程序(我正在尝试使用ApacheCamel进行集成),正在向我的mq发送一条xml消息,该消息嵌入在soap信封中(“不必要的噪音”),我无法更改客户端应用程序。我必须丢弃肥皂信封并将xml放入肥皂体中并将其贴在另一个jmsqueue上。
PS: 我知道如何从SOAPMessage获取原始xml,如下所述:Getting Raw XML From SOAPMessage in Java
答案 0 :(得分:1)
如果你有XML的SOAPEnvelope,那么只需使用xpath来隔离你想要的XML并在途中发送它......
.setBody(xpath("//SOAPBody"))...
答案 1 :(得分:-1)
使用xslt删除名称空间并将其视为普通xml。
&ltxsl:stylesheet version =“ 2.0” xmlns:xsl =“ http://www.w3.org/1999/XSL/Transform” xmlns:soap =“ http://schemas.xmlsoap.org/soap/envelope /“&gt&ltxsl:输出方法=” xml“ indent =” yes“ omit-xml-declaration =” yes“ /&gt&ltxsl:template match =” “&gt&ltxsl:element name =” {local-name()}“ &gt&ltxsl:apply-templates select =“ @ | node()” /&gt&lt / xsl:element&gt&lt / xsl:template&gt&ltxsl:template match =“ @ *”&gt&ltxsl:attribute name =“ {local-name()} “&gt&ltxsl:value-of select =”。 /&gt&lt / xsl:attribute&gt&lt / xsl:template&gt&ltxsl:template match =“ text()| comment()| processing-instruction()”&gt&ltxsl:copy /< x / xsl:template&gt< x / xsl:stylesheet&gt
将大于&>的&gt替换为小于&s的&lt,并另存为xslt,并用于转换以删除soap名称空间。