我在路由中定义了一个标头,并希望使用标头的值来确定其他标头值。
示例:
<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,并希望以更干净的方式使用它们。
答案 0 :(得分:1)
根据Camel XPath Component Documentation,有一些特殊的Camel XPath函数,如in:body
,in:header
等:
我想你可以这样做:
<setHeader headerName="NumberOfStudentByThatName">
<xpath>count(//*/Student[StudentName/FirstName/text() = in:header("FirstNameOfStudent")])</xpath>
</setHeader>
PS。我没有测试它,我不确定标题名称中的双引号 - doc页面显示了我编号为'FirstNameOfStudent'
的URL编码值。所以,你可以搞清楚。