如何在apache camel中全局设置交换属性

Kou*_*ali 1 apache-camel apache-karaf apache-servicemix

例如:

from("direct:test")
  .multicast() 
     .to("direct:req1","direct:req2");

from("direct:req1")
  .to(cxf:bean:endpoint1)
  .process("response1");

from("direct:req2")
 .process("requestProcessor2")
 .to(cxf:bean:endpoint2)
 .process(response2);
Run Code Online (Sandbox Code Playgroud)

我是apache camel的新手,我只想知道有没有办法使用我从"requestProcessor2"中的endpoint1获得的响应.

Aku*_*our 6

你可以这样做

    from("direct:test")
            .setProperty("test.body", body())
            .to(cxf:bean:endpoint1)
            .setProperty("endpoint1.body", body())
            .process("response1")
            .setBody(exchangeProperty("test.body"))
            .to("direct:req2")

    from("direct:req2")
            .process("requestProcessor2")
            .to(cxf:bean:endpoint2)
            .process(response2);
Run Code Online (Sandbox Code Playgroud)

您可以将原始正文保存在属性中,也可以保存在endpoint1中的正文中.然后,您可以将交易所发送到直接:req2,其中包含exhcnage正文中的原始正文,以及您可以访问的属性中的正文表单endpoint1(在您的处理器或其他位置).

要访问处理器中的属性:

public void process(final Exchange exchange) throws Exception {

    Object body = exchange.getProperty("endpoint1.body");

}
Run Code Online (Sandbox Code Playgroud)