我是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并且不生成任何内容。怎么了?
答案 0 :(得分:0)
在你的第二段代码中,当设置header.temporary时,你应该改变两件事:
setHeader("temporary", new OutputType())
- 'header'前缀不是
需要 - 您通过方法调用直接寻址标题。getIn()
代替getOut()
。输入将被复制到
输出。您可能想要对该过程进行一些研究
骆驼建立消息的细节 - 我不是100%肯定
这一个。答案 1 :(得分:0)
更改
exchange.getOut().setHeader("header.temporary", new OutputType());
要
exchange.getIn().setHeader("temporary"), new OutputType());
.setHeader()是您使用简单语言的时候。在99%的情况下,getIn()就足够了。