如何使用Apache Camel交换消息?

时间:2017-04-29 00:52:51

标签: apache-camel

我是Apache Camel的新手。请看下面的代码:

我有一个以cxf webservice公开的服务:

interface CxfService{
    public OutputType hello(InputType input);
}

这是我的路线:

from("cxf:/test?serviceClass=" + CxfService.class.getName())
    .to("log:cxfLog1")
    .recipientList(simple("direct:${header.operationName}"));

from("direct:hello")
    .process(new Processor(){

        public void process(Exchange exchange) throws Exception {

            InputType file = exchange.getIn().getBody(InputType.class);
            exchange.getOut().setBody(new OutputType());
        }

    });

代码按预期工作,它使用InputType并生成OutputType。

我想借用我的身体去做另外的事情,所以我这样重写:

from("cxf:/test?serviceClass=" + CxfService.class.getName())
    .to("log:cxfLog1")
    .recipientList(simple("direct:${header.operationName}"));

from("direct:hello")
    .process(new Processor(){

        public void process(Exchange exchange) throws Exception {

            InputType file = exchange.getIn().getBody(InputType.class);
            exchange.getOut().setHeader("header.temporary", new OutputType());
        }

    })
    .to("some endpoint")
    .setBody(simple("${header.temporary}"));

此Web服务使用InputType并且不生成任何内容。怎么了?

2 个答案:

答案 0 :(得分:0)

在你的第二段代码中,当设置header.temporary时,你应该改变两件事:

  1. setHeader("temporary", new OutputType()) - 'header'前缀不是 需要 - 您通过方法调用直接寻址标题。
  2. 使用getIn()代替getOut()。输入将被复制到 输出。您可能想要对该过程进行一些研究 骆驼建立消息的细节 - 我不是100%肯定 这一个。

答案 1 :(得分:0)

更改

exchange.getOut().setHeader("header.temporary", new OutputType());

exchange.getIn().setHeader("temporary"), new OutputType());

.setHeader()是您使用简单语言的时候。在99%的情况下,getIn()就足够了。