camel:路由前修改输出

时间:2013-03-31 15:06:27

标签: rest apache-camel

在驼峰路由器中,我有以下路由。

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。

如果有可能,有人可以帮助我吗?如果问题不明确,请告诉我。

1 个答案:

答案 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将是一个自定义方法,将执行所需的转换。