java - 删除 <soapenv :Header> from payload in XML route

标签 java xml soap apache-camel blueprint-osgi

我正在寻找如何删除 <soapenv:Header> 的解决方案使用基于 XML 的路由 (Apache Camel Blueprint XML) 的 SOAP 请求的一部分。

所以这个:

<soapenv:Envelope xmlns:net="..." xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
      ...
   </soapenv:Header>
   <soapenv:Body>
      ...
   </soapenv:Body>
</soapenv:Envelope>

应该变成这样:

<soapenv:Envelope xmlns:net="..." xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      ...
   </soapenv:Body>
</soapenv:Envelope>

我想我找到了基于java的解决方案,也找到了基于xslt的解决方案,但我发现它们不太适合我的项目,我仍然希望有一些简单的方法可以直接在XML路由中执行此操作,而无需创建java处理类或添加 XSLT 模板。

我正在尝试<removeHeaders pattern="_something_"/>但要么我无法找出正确的“东西”,要么这个命令仅适用于有效负载部分上方的 header ...

最佳答案

在 Blueprint 中,您可以使用 XPATH 获取 XML 的正文。像这样的事情:

<setProperty propertyName="MessageBody">
    <xpath>//*[local-name()='Body']</xpath>
</setProperty>

然后您可以使用信封标签重建您的消息。

<setBody>           
    <simple><![CDATA[<Envelope>${property.MessageBody}</Envelope>]]></simple>
</setBody>

只有当您的信封标签是常量时,这才有效。

关于java - 删除 <soapenv :Header> from payload in XML route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968693/

相关文章:

java - JFrame 中的窗口动画

java - 在 Java 中使用第三个变量进行交换

java - 我可以使用根相对 XPath 表达式来获取克隆节点中的节点吗?

java - 在 XML 中将 Spring 列表创建为 bean

java - org.ksoap2.serialization.SoapSerializationEnvelope

java - Json、正则表达式、java。如何替换仅出现一次的子字符串

java和同步

java - 在 Android 中处理多个 xml 文件

通过 https 调用 PHP Soap

java - 如何使用 CXF 生成的客户端可视化发送的 XML 流