1

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

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。

如果可能的话,有人可以帮助我吗?如果问题不清楚,请告诉我。

4

1 回答 1

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

于 2013-04-01T01:42:28.993 回答