Camel:如何根据xpath表达式操作输出消息/ set头

时间:2014-05-14 02:46:17

标签: xpath output apache-camel

我尝试根据传入的XML动态创建RESTful URL:

输入:

<message>
   <request name="John"/>
</message>

我想像这样路由它:

http://myhost:8080/myservice?name=John

我知道如何使用setHeader设置网址参数,但我不知道如何从输入消息中提取属性值。我正在寻找的SOOPER_XPATH表达式可能如下所示:

from("direct:start")
  .setHeader(Exchange.HTTP_QUERY,
     simple("name=$SOOPER_XPATH(${in.body}, '//request/@name')")
  .to("http://myhost:8080/myservice").log("Received response: ${in.body});

2 个答案:

答案 0 :(得分:1)

可能有几种方法可以做到这一点,这就是我们在其中一个项目中所做的,工作正常:

exchange.getIn().setHeader(XPathBuilder.xpath("/message/messageID/text()").evaluate(exchange,String.class));

我们在处理器内部执行此操作,但您也可以直接在路径中使用XPathBuilder。

这只是让xpath正确的问题。我通常使用像http://www.xpathtester.com/xpath这样的工具来测试我的xpath。

答案 1 :(得分:0)

要在Processor之外的路线中设置标题,请使用:

from("direct:start")
    .setHeader(Exchange.HTTP_QUERY, xpath("//request@name").stringResult())
    .to("http://myhost:8080/myservice").log("Received response: ${in.body}");