2

我写了骆驼选择,路线的输入是xml。如下所示:我想用 json 作为输入来编写选择,因此如何评估 json 以路由到下一个组件。请指导我。JSON是:

{
  "service": { "serviceType": "OtherServcie" }
}

<choice>
 <when>
  <xpath>/service/serviceType='PaymentServcie'</xpath>
  <log message="In PaymentServcie"/>
 </when>
 <otherwise>
  <log message="In OtherServcie"/>
 </otherwise>
</choice>
4

4 回答 4

1

也许为时已晚,但答案是使用camel-jsonpath

<route>
  <from uri="direct:start"/>
  <choice>
    <when>
      <jsonpath>$.service[?(@.serviceType=='PaymentService')]</jsonpath>
      <log message="In PaymentServcie"/>
    </when>
    <otherwise>
      <log message="In OtherServcie"/>
    </otherwise>
  </choice>

不要忘记 Maven 依赖项:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jsonpath</artifactId>
    <version>${camel.version}</version>
</dependency>
于 2017-02-02T13:12:44.050 回答
0

我不确定您是否可以在 JSON 上使用 xpath。至少对于您正在使用的组件。我所做的是定义“xmljson”数据格式并使用它来解组 JSON。JSON 到 XML,然后在 XML 上应用 xpath。

<camelContext trace="false" xmlns="http://camel.apache.org/schema/blueprint">
    <dataFormats>
           <xmljson id="xmljson"/>
    </dataFormats>

   <route 
    <from uri<.................
          ..........
          <unmarshal ref="xmljson"/>

.pom 文件

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-xmljson</artifactId>
    <version>2.10.0.fuse-71-047</version>
    <!-- Use the same version as camel-core, but remember that this component 
        is only available from 2.10 onwards -->
</dependency>
于 2013-09-27T12:23:54.650 回答
0

有一张 JIRA 票可以在未来研究解决方案,在 Camel 中有开箱即用的“json 语言”,因此您可以在表达式/谓词中使用它。

虽然我们还没有找到灵丹妙药,因为缺少一些支持表达式语法的优秀 json 库。尽管对 JIRA 票有一些想法,但如何以不同的方式执行此操作:

https://issues.apache.org/jira/browse/CAMEL-6238

于 2013-10-06T06:48:39.043 回答
0

您可以使用 header 来评估表达式。就在评估路由中的选择之前,您可以在处理器中设置标头(输入输出消息)。然后评估“简单”标签中的表达式。

${in.header.serviceType}=='PaymentService'

http://camel.apache.org/simple.html

于 2013-09-16T15:22:29.703 回答