我已经为服务创建了代理。
代理(请求类型为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模式。
答案 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