【问题标题】:Camel..using xpath to parse xml in message bodyCamel..使用 xpath 解析消息正文中的 xml
【发布时间】:2014-05-17 05:40:58
【问题描述】:

我有一个简单的流程,它从一个 activemq1 读取并从消息中解析一个 id 并将 id 发送到另一个 activemq2。

以下是写入 activemq1 的消息示例:

<Customer>
  <Order>
     <id>123</id>
  </Order>
<Customer>

我需要从上面的消息体中解析出id,并将下面的消息发送到activemq2:

"Order with id{123} has been queued" 

这是我想出的流程,但它将完整的请求 xml 写入队列,而不是我要查找的消息:

<from uri="jms:queue:Q.activemq1"/>
   <setBody>
        <xpath>"/Customer/Order/id/@value/text()"</xpath>
    </setBody>
 <to uri="jms:queue:Q.activemq2"/>

以上任何错误或任何更正

【问题讨论】:

    标签: java xml xpath jms apache-camel


    【解决方案1】:

    使用

    <route>
        <from uri="jms:queue:Q.activemq1" />
        <setBody>
            <xpath resultType="java.lang.String">/Customer/Order/id/text()</xpath>
        </setBody>
        <setBody>
            <simple>Order with ${body} has been queued</simple>
        </setBody>
        <log message="${body}"/>
    </route>
    

    打印出来

    Order with 123 has been queued
    

    【讨论】:

    • 您好,目的是将消息(123的订单已排队)发送到activemq2。那么,如何将 {123} 与消息的其余部分连接起来。
    • 一个很好的解决方案。但是,我建议使用string() 而不是text(),这在几乎所有情况下都更好(例如,如果您使用`text(),您可能会在XML 中返回cmets,这几乎是无意的)
    • 似乎根本没有应用 xpath。我得到了正在传输的完整 xml 123
    • 这是错误..看起来它正在将其视为 dob 对象而不是捕获的字符串/文本:org.apache.camel.builder.xml.InvalidXPathExpression: Invalid xpath: /Customer/订单/id/文本()。原因:javax.xml.xpath.XPathExpressionException:org.xml.sax.SAXParseException:XML 文档结构必须在同一个实体内开始和结束。
    • 我错了...这是我看到的确切错误...使用转换器:InstanceMethodTypeConverter:public java.lang.String org.apache.camel.converter.jaxp.DomConverter.toString(org .w3c.dom.NodeList,org.apache.camel.Exchange) 抛出 javax.xml.transform.TransformerException 来转换 [class org.apache.xml.dtm.ref.DTMNodeList=>class java.lang.String]
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    相关资源
    最近更新 更多