0

我为服务创建了一个代理。

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

进入该process(Exchange exchange)方法的交换体是TypeA.

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

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

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

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

exchange.getIn().setBody(typeA); 

我拿到java.lang.IllegalArgumentException: argument type mismatch

现在,我想Exchange使用Processor.

我尝试进入处理器,出现以下异常

java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.cxf.databinding.AbstractWrapperHelper.createWrapperObject(AbstractWrapperHelpe

真正的 Web 服务没有被调用。

如何解决这个问题。

我在代理中使用 POJO 模式。

4

1 回答 1

1

这没有任何问题:

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
于 2014-04-03T17:50:31.540 回答