Camel Proxy和替换Exchange正文

时间:2014-03-29 08:44:51

标签: apache-camel fuseesb jbossfuse

我已经为服务创建了代理。

代理(请求类型为TypeA)和实际服务(请求类型为TypeB)之间有处理器。

process(Exchange exchange)方法中使用的Exchange正文为TypeA

我可以使用以下代码行访问数据

TypeA typeA = exchange.getIn().getBody(TypeA.class);

现在,我想将此信息更改为TypeB

我正在使用以下行添加正文。

exchange.getIn().setBody(typeA); 

我得到了java.lang.IllegalArgumentException: argument type mismatch

现在,我想使用来自Exchange的{​​{1}}来调用真实服务。

我试过并在处理器中遇到以下异常

Processor

不会调用真正的Web服务。

如何解决此问题。

我在代理中使用POJO模式。

1 个答案:

答案 0 :(得分:0)

这没有任何问题:

private static class ResetBodyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() {
        from("direct:start")
            .process(new Processor() {
               @Override
               public void process(final Exchange exchange) throws Exception {
                   final ClassA a = exchange.getIn().getBody(ClassA.class);
                   LOG.info("body = " + a);
                   exchange.getIn().setBody(new ClassB());  // reset the body
               }
            })
            .log("body = ${body}");
    }
}

public class ClassA {
    @Override
    public String toString() {
        return "I'm A";
    }
};

public class ClassB {
    @Override
    public String toString() {
        return "I'm B";
    }
};

打印:

[                          main] ResetBody                      INFO  body = I'm A
[                          main] route1                         INFO  body = I'm B