当前位置: 首页 > 知识库问答 >
问题:

骆驼代理和替换交换体

刘承运
2023-03-14

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

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

进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。

我能够使用下面的代码行访问数据

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

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

我使用下面的代码添加主体。

exchange.getIn().setBody(typeA); 

我得到了java.lang.IllegalArgumentExc的:参数类型不匹配

现在,我想使用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模式。

共有1个答案

齐浩淼
2023-03-14

这没有任何问题:

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
 类似资料:
  • 脚本: CSV文件被发送到我的endpoint,Pojo将java数据和消息转换为我的一条路由,比如(“direct:consume”)路由,然后处理器处理该文件,处理消息并创建新的输出 问题: 文件只包含代码中断的一行 文件包含多行代码工作 尝试: 试图找到一种方法来确定交易记录的数量。getIn()。getBody() 阅读stackoverflow 阅读有关exchange的文档 在不知道记

  • 我正在设置路由1中骆驼交换的属性。我正在尝试在拆分器内的第二条路由中更新该属性。但是在拆分器的第二次迭代中,我得到的是我在路由1中设置的原始值,而不是新的更新值。下面是我正在尝试的示例。。 豆子里面: 为什么不更新属性?甚至我也试着在标题中设置。同样的结果。非常感谢。

  • 这里是Java 8和Camel 2.19.x。我有以下骆驼路线: 和处理器:

  • 我有一个简单的路线,看起来像这样: CXF 配置也非常简单: 此简单路由失败,出现以下异常 这是消息历史记录,表明它在

  • 我的主要问题是:在JPA实体类内的方法上,除了@Consumed注释之外,还有其他选择吗? 我问这个问题是因为我真的想把我的JPA模型(例如我的所有实体)具体化,以便能够在使用相同数据库的其他项目之间共享。此外,我不想在我的子项目中出现一些骆驼依赖,这意味着要删除@Consumed注释。我基本上有这样一条路线: 我尝试了不同的解决方案: 在我的camel项目中,使用@Consumed方法扩展子模块

  • 我有一条骆驼路线,如下所示。 bean方法顾名思义,分别将body设置为“Hello”和“World”。 我还设置了onException子句,如下所示: 假设,我将一条消息放在队列“开始”上,正文为“测试消息”。在第一个杜米豆中成功处理后,我在第二个杜米豆中抛出一个运行时异常。我希望看到实际的消息或(原始消息内容完好无损,即“测试消息”)被发送到我的死信队列。 但是,死信队列上的消息内容是“He