【问题标题】:how to set jms message custom header using xpath in camel route如何在骆驼路线中使用xpath设置jms消息自定义标头
【发布时间】:2015-09-27 00:37:32
【问题描述】:

我正在使用骆驼路由构建器通过设置一些自定义标头,通过使用 xpath 从 xml 读取节点值,将一个 activemq jms 消息从一个队列移动到另一个队列。什么都没有设置。如果您知道答案,请提出建议。

from("activemq:com.queue1")
    .setHeader("orderNumber").xpath("/orderRequest/authNumber")
                    .to("activemq:com.queue2")
            .end();

XML 看起来像

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:orderRequest xmlns:ns2="http://www.company.com/services/entity/v1" 
                  xmlns:ns3="http://www.company.com/services/dataobject/v1">    
    <authNumber>A81585</authNumber>
</ns3:orderRequest>

【问题讨论】:

  • 你能发布你试图遍历的 XML 吗?
  • 这是一个很大的 xml,所以我无法分享,但让我们尝试根节点下的第一个元素。比如 company.com/services/entity/v1" xmlns:ns3="company.com/services/dataobject/…>
  • 您需要为 xpath 设置命名空间,更多信息请参见 camel.apache.org/xpath
  • 如何访问该 JMS 消息头属性值。?
  • 你可能想告诉xpath你想使用哪种类型的订单号,应该是字符串还是整数等。setHeader("orderNumber").xpath("/orderRequest/authNumber", String .class)

标签: xpath jms apache-camel activemq


【解决方案1】:

带有命名空间的 XML 需要正确设置命名空间。

您需要设置一个命名空间处理程序,如下所示:

Namespaces ns = new Namespaces("ns3", "http://www.company.com/services/dataobject/v1");

....
xpath("/ns3:orderRequest/ns3:authNumber",ns)
...

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2017-07-06
    • 2019-12-30
    相关资源
    最近更新 更多