Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 在Camel中解析错误响应_Xpath_Apache Camel - Fatal编程技术网

Xpath 在Camel中解析错误响应

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

Camel是新手,我正在尝试解析一个响应错误xml。在camel上下文中,我需要确定错误文件中是否存在特定值,并以与其他错误不同的方式处理它

其他错误使用一系列when语句:

<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>