使用camel,如何使用标头的值来定义XPath表达式?

时间:2013-04-02 01:11:03

标签: java spring apache-camel

我有一个标题,其中包含XPath定义:

myXPath = "/bookshop/author/books/1|/bookshop/author/books/2"

然后我想在Xpath表达式中使用它来设置另一个标题:

<setHeader headerName="authorBooks">
    <xpath resultType="org.w3c.dom.NodeList">${in.header.myXPath}</xpath>
</setHeader>

阅读docs它似乎可以使用标题值作为表达式的一部分,但不能定义整个事物?我尝试了这个并没有用:

<xpath resultType="org.w3c.dom.NodeList">in:header('myXPath')</xpath>

任何人都知道这样做的方法吗?我发现这个bug看起来像我想要的那样,但它不会被修复到3.0: https://issues.apache.org/jira/browse/CAMEL-3697

2 个答案:

答案 0 :(得分:1)

与Camel几乎一样,当DSL受限于您的情况时,您可以切换到在普通Java处理器/ bean中执行此特定部分。

您可以使用XPathBuilder执行表达式并手动检索标题。

伪码:

 String result = XPathBuilder.xpath(exchange.getIn().getHeader("myXpath",String.class)).evaluate(context, exchange.getIn().getBody());

答案 1 :(得分:1)

在Camel 2.11中,这更容易,因为您可以直接在标头上执行xpath。请参阅<{3>}部分在标题上使用XPath

部分中的文档
相关问题