在驼峰路由器中,我有以下路由。
from("jetty:http://localhost:9092?matchOnUriPrefix=true").
to("http://server:9093/service1?bridgeEndpoint=true&throwExceptionOnFailure=false")
.to("http://server:9094/service2?bridgeEndpoint=true&throwExceptionOnFailure=false")
.to("log:output")
以上路由工作正常。
但我的要求是在发送到service2之前修改service1的输出。就像我得到的一样
<x>abc</x>
我必须将其转换为
<y><x>abc</x></y>
我尝试使用处理器但是我将service2的exchange.getOut()作为null,而实际上它返回了xml。
如果有可能,有人可以帮助我吗?如果问题不明确,请告诉我。
答案 0 :(得分:1)
我不确定您在路线中添加此处理器的位置。进入处理器的消息可在交换机的消息中找到。我看到你试图从外面拉出信息。
当你在一个out消息上设置正文时,它在下一个端点或处理器的交换机上的消息中可用,因此必须选择交换机上正确的消息。
下面的路线应该是有意义的,否则在你的问题中粘贴你的整个路线和处理器,成员可以看到问题所在:
from("jetty:http://localhost:9092?matchOnUriPrefix=true")
.to("http://server:9093/service1?bridgeEndpoint=true&throwExceptionOnFailure=false").
process(new Processor() {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
exchange.getOut().setBody(modifyBody(body);
}
})
.to("http://server:9094/service2?bridgeEndpoint=true&throwExceptionOnFailure=false")
.to("log:output");
其中modifyBody将是一个自定义方法,将执行所需的转换。