【问题标题】:Camel Proxy and Replacing Exchange bodyCamel 代理和替换交换体
【发布时间】:2014-04-04 01:50:31
【问题描述】:

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

在代理(请求类型为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

现在,我想使用来自ProcessorExchange 调用真正的服务。

我尝试在处理器中得到以下异常

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

真正的网络服务没有被调用。

如何解决这个问题。

我在代理中使用 POJO 模式。

【问题讨论】:

  • 您需要提供更多详细信息,然后才能有人帮助您。没有太多细节,不清楚问题是什么等。例如花更多时间写下更好的问题,以便更好的人可以帮助你。
  • 请检查修改后的代码。

标签: apache-camel fuseesb jbossfuse


【解决方案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

【讨论】:

  • 这是我的错误,如前所述,参数类型不正确,我将错误的参数传递给实际服务。很酷的例子:)
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 2022-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多