Xpath 在Camel中解析错误响应
Camel是新手,我正在尝试解析一个响应错误xml。在camel上下文中,我需要确定错误文件中是否存在特定值,并以与其他错误不同的方式处理它 其他错误使用一系列when语句:Xpath 在Camel中解析错误响应,xpath,apache-camel,Xpath,Apache Camel,Camel是新手,我正在尝试解析一个响应错误xml。在camel上下文中,我需要确定错误文件中是否存在特定值,并以与其他错误不同的方式处理它 其他错误使用一系列when语句: <when> <xpath>/abc:ErrorResponse/abc:Error/abc:Message/.</xpath> <setHeader headerName="RESPONSE_STRING"> <xpath result
<when>
<xpath>/abc:ErrorResponse/abc:Error/abc:Message/.</xpath>
<setHeader headerName="RESPONSE_STRING">
<xpath resultType="java.lang.String">/abc:ErrorResponse/abc:Error/abc:Message/.</xpath>
</setHeader>
<setHeader headerName="MY_DATA_FIELD"><constant>Error</constant></setHeader>
<to uri="def:doErrorStuff" pattern="InOnly"/>
</when>
<when>
<xpath>/ghi:ErrorResponse/ghi:Error/ghi:Message/.</xpath>
<setHeader headerName="RESPONSE_STRING">
<xpath resultType="java.lang.String">/ghi:ErrorResponse/ghi:Error/ghi:Message/.</xpath>
</setHeader>
<setHeader headerName="MY_DATA_FIELD"><constant>Error</constant></setHeader>
<to uri="def:doErrorStuff" pattern="InOnly"/>
</when>
我结合使用xpath和“simple”进行检查。像这样:
<when>
<xpath>/ghi:ErrorResponse/ghi:Error/ghi:Message/.</xpath>
<when>
<simple>${in.body.code} == 'StringIAmSearchingFor'</simple>
<!-- Do Stuff --!>
</when>
</when>
/ghi:ErrorResponse/ghi:Error/ghi:Message/。
${in.body.code}=='StringIAmSearchingFor'
您正在对输入使用xpath,这表明它是XML,然后是简单(${in.body.code}),在这种情况下也是XML。Simple用于遍历java主体,而不是XML等其他格式。始终坚持使用XPATH—上面的代码可以很容易地用XPATH实现。当然,另一种方法是使用or将XML解组为java对象,然后只能使用simple/OGNL/groovy或诸如此类的工具
因为我建议您单独使用xpath来解决这个问题,所以您当然可以使用xpath和运算符来将多个xpath表达式和多个xpath表达式组合在一起。camel choice/when中的所有逻辑和功能都驻留在您正在使用的表达式语言中(无论是simple还是xpath),因此,如果您想混合使用表达式语言,您必须建立一种。如果您试图实现非常复杂的路由逻辑,那么这实际上可能是一件好事。就一个特例来说,我觉得,就是一团糟
您正在对输入使用xpath,这表明它是XML,然后是简单(${in.body.code}),在这种情况下也是XML。Simple用于遍历java主体,而不是XML等其他格式。始终坚持使用XPATH—上面的代码可以很容易地用XPATH实现。当然,另一种方法是使用or将XML解组为java对象,然后只能使用simple/OGNL/groovy或诸如此类的工具
因为我建议您单独使用xpath来解决这个问题,所以您当然可以使用xpath和运算符来将多个xpath表达式和多个xpath表达式组合在一起。camel choice/when中的所有逻辑和功能都驻留在您正在使用的表达式语言中(无论是simple还是xpath),因此,如果您想混合使用表达式语言,您必须建立一种。如果您试图实现非常复杂的路由逻辑,那么这实际上可能是一件好事。就一个特例来说,我觉得,就是一团糟
请发布一些示例输入。@Jens-没问题,发布了xmlPlease发布了一些示例输入。@Jens-没问题,发布了xmlPlease谢谢您的回复。我将尝试使用一个xpath,直到“Code”元素的值,并将其与我要查找的字符串进行比较。不知道那会是什么样子,但我会好好玩玩。谢谢你的回复。我将尝试使用一个xpath,直到“Code”元素的值,并将其与我要查找的字符串进行比较。我不知道那会是什么样子,但我会好好玩玩的。
<when>
<xpath>/ghi:ErrorResponse/ghi:Error/ghi:Message/.</xpath>
<when>
<simple>${in.body.code} == 'StringIAmSearchingFor'</simple>
<!-- Do Stuff --!>
</when>
</when>