1

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

其他错误使用一系列 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>

我的错误 XML 文件有一个带有子“代码”元素的外部错误元素。我需要解析代码元素更新的值:这是我正在解析的 XML

 <ErrorResponse xmlns="http://myhost/location1/">
    <Error>
        <Type>reserved</Type>
        <Code>TEXT_I_NEED_TO_PARSE_IN_WHEN_STATEMENT</Code>
    </Error>
    <RequestId>some_id</RequestId>
</ErrorResponse>

我使用了 xpath 和“简单”的组合来进行检查。像这样:

    <when>
        <xpath>/ghi:ErrorResponse/ghi:Error/ghi:Message/.</xpath>
        <when>
            <simple>${in.body.code} == 'StringIAmSearchingFor'</simple>
            <!-- Do Stuff --!>
        </when>
    </when>

但是,我没有得到我期望的回应。
1.这种方法或语法有问题吗?
2.有没有办法在布局时将双精度组合在一起,以便将它们组合在一起。否则,如果我在现有的两个之前添加我的“when”语句,则现有的“ghi”when 语句将永远不会被执行(xpath 语句匹配)。

4

1 回答 1

1
  1. 您在输入中使用 xpath,表明它是 XML,然后是简单的 (${in.body.code}),在这种情况下也将是 XML。Simple 用于遍历 java 主体,而不是 XML 等其他格式。一直坚持使用 XPATH - 您上面的代码可以很容易地在 xpath 中实现。当然,另一种方法是使用xstreamjaxb将 XML 解组为 java 对象,然后您只能使用 simple/OGNL/groovy 或诸如此类的东西。

  2. 由于我建议您单独使用 xpath 来解决这种情况,您当然可以同时使用 xpath 和 operator to 以及几个 xpath 表达式。骆驼选择/何时驻留在您正在使用的表达式语言中的所有逻辑和功能(无论是简单的还是 xpath),所以如果您想混合表达式语言,您必须建立某种决策树。如果您尝试实现非常复杂的路由逻辑,那实际上可能是件好事。对于一个特殊情况 - 恕我直言,只是一团糟。

于 2013-07-20T21:41:28.463 回答