在xpath中使用Headers在路由中设置另一个标头?

时间:2017-01-27 13:58:18

标签: xpath apache-camel

我在路由中定义了一个标头,并希望使用标头的值来确定其他标头值。

示例:

<route id="use_reference_number">
 <from uri="direct:file_name:use_reference_number">
  <setHeader headerName="FirstNameOfStudent">
    <xpath resultType="java.lang.String">//*/Student/StudentName/FirstName/text()</xpath>
  </setHeader>

  <setHeader headerName="NumberOfStudentByThatName">
    <xpath>count(//*/Student[StudentName/FirstName/text() = ${in.header.FirstNameOfStudent}])</xpath>
  </setHeader>
</route>

基本上这里基于单独的x路径的结果我想确定第二个学生的学生数量,最后使用&#34; NumberOfStudentByThatName&#34;选择 - 何时采取单独的路线。但是当我使用这个表达式时,它返回0.我认为它无法解析标题。

<setHeader headerName="NumberOfStudentByThatName">
   <xpath>count(//*/Student[StudentName/FirstName/text() = 'AMAN'])</xpath>
</setHeader>

当我像上面一样使用它时,它的工作非常好,但我不想硬编码任何值,而是使用输入中的内容。

在这种情况下,我有两个单独的xmls,并希望以更干净的方式使用它们。

1 个答案:

答案 0 :(得分:1)

根据Camel XPath Component Documentation,有一些特殊的Camel XPath函数,如in:bodyin:header等: 我想你可以这样做:

<setHeader headerName="NumberOfStudentByThatName">
  <xpath>count(//*/Student[StudentName/FirstName/text() = in:header("FirstNameOfStudent")])</xpath>
</setHeader>

PS。我没有测试它,我不确定标题名称中的双引号 - doc页面显示了我编号为&#39;FirstNameOfStudent&#39;的URL编码值。所以,你可以搞清楚。