【问题标题】:Apache Camel: how store variable for later useApache Camel:如何存储变量以供以后使用
【发布时间】:2012-02-29 23:18:00
【问题描述】:

在使用 Spring DSL 与 Camel “玩耍”时,我遇到了以下问题。假设预期的消息流如下所示:

  1. 客户端向 CAMEL 发送带有 XML 正文的 HTTP POST 消息
  2. CAMEL 将 HTTP POST 消息代理到服务器,使用 URI 稍作修改 接收到的 XML 正文中的信息(例如:使用 XPATH 过滤掉某个参数)
  3. 在 CAMEL 收到回复后,CAMEL 使用 1 中收到的 XML 正文中的参数向服务器发送 HTTP PUT 消息

比如:

<route>
   <from uri="...">
   <to uri="...">
   <to uri="...">
 </route>

问题:如何在步骤 1 中将参数存储在 Spring DSL 中,以便稍后在步骤 3 中使用?

所以,我想从步骤 1 中接收到的消息的 XML 正文中提取 XML 参数,并将它们放入变量中,然后我可以使用这些变量来编写要在步骤 3 中发送的消息。

为了提取参数,我正在考虑使用 XPATH。看起来不错,但我只是不知道如何将 XPATH 的输出放入变量中,然后稍后使用该变量......(语法??)

注意:如您所见,我的开发知识相当有限……抱歉。但是,如果有人可以帮助解决这个问题,那就太好了:)。

【问题讨论】:

    标签: spring apache-camel


    【解决方案1】:

    我给你举几个例子:

    <setHeader headerName="token">
        <constant>someValue</constant>
    </setHeader>
    
    <setHeader headerName="userName">
        <simple>${properties:userName}</simple>  //from config
    </setHeader>
    
    <setProperty propertyName="bodyBkp">
        <simple>${in.body}</simple>
    </setProperty>
    
    <setProperty propertyName="orderNumber">
        <xpath resultType="String">//item[1]/orderNumber/text()</xpath>
    </setProperty>
    

    吸气剂

    ${exchangeProperty[orderNumber]}
    
    ${in.headers.token}
    

    文档

    检查简单表达式语言: http://camel.apache.org/simple.html

    有时查看 Camel 的测试用例也会有所帮助,尤其是对于 Spring DSL:

    【讨论】:

      【解决方案2】:

      您可以像这样在Exchange 属性或消息头中设置存储数据...

      .setHeader("ID", XPathBuilder.xpath("/order/@id", String.class))
      .setProperty("ID", XPathBuilder.xpath("/order/@id", String.class))
      

      然后像这样在 Exchange 的 bean/处理器中检索它们...

      String propId = (String) exchange.getProperty("ID");
      String headerId = (String) exchange.getIn().getHeader("ID");                        }
      

      【讨论】:

      • 感谢您的回复。但是,除了 Spring DSL(XML 表示法)之外,是否有机会获得相同的代码?干杯。
      • 同时,我用 Java DSL 重新编码,效果很好。再次感谢。我还有 1 个问题:使用 setHeader 和 setProperty 有什么区别?
      • 阅读本章了解骆驼的概念,你就会知道属性和标题的区别:manning.com/ibsen/chapter1sample.pdf
      • 谢谢。那一章解释得很好:)。
      • setProperty 不接受三个参数。
      猜你喜欢
      • 2021-10-11
      • 2011-11-07
      • 2012-05-25
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多