gpt4 book ai didi

java - Camel 测试模板使用与我发送的交换器不同的交换器

转载 作者:行者123 更新时间:2023-11-30 03:09:35 24 4
gpt4 key购买 nike

我有以下测试:

public class MyTest extends CamelSpringTestSupport {

@Override
protected AbstractXmlApplicationContext createApplicationContext() {
return new ClassPathXmlApplicationContext(new String[] {
"classpath:my-config.xml",
});
}

@Test
public void testSomething() throws Exception {

Exchange exchange = new DefaultExchange(context);
exchange.getIn().setHeader("myId", "1234");
MessageContentsList parameters = new MessageContentsList();
parameters.add(0, "");
parameters.add(1, "1234");
exchange.getIn().setBody(parameters);

System.out.println("exchange before = " + System.identityHashCode(exchange)); //1657040467

template.send("direct:myRoute", exchange);

Object object = exchange.getOut().getBody();

System.out.println("result = " + object); //null
System.out.println("exchange after = " + System.identityHashCode(exchange)); //1657040467

assertFalse(exchange.isFailed());
}
}

这是路线“direct:myRoute”中的最后一步:

public void doSomething(Exchange exchange)
{
System.out.println("exchange within = " + System.identityHashCode(exchange)); //1649140180

exchange.getOut().setBody(1);
}

我的路线是由 RouteBuilder 类定义的,我通过以下方式加载它们

<camelContext id="mainContext" xmlns="http://camel.apache.org/schema/spring">

<packageScan>
<package>com.my.route</package>
</packageScan>

</camelContext>

也可以通过代码动态地实现:

((CamelContext) applicationContext.getBean("mainContext")).addRoutes(routeBuilder);

正如您所看到的,当我从测试中调用路由时,我无法检索路由的输出,因为在测试中由于某种原因它是一个不同的交换对象(但是,原始交换 header 和属性以某种方式复制到路线内的交换站)。当我通过 XML 定义路由时,不会出现此问题。

这是为什么?当我从测试中调用路由时,如何检索该路由的结果?

最佳答案

我不是100%确定,但我不认为你可以这样写。

template.send("direct:myRoute", exchange);
Object object = exchange.getOut().getBody();

理想情况下应该是:

    Exchange out=null;
out=template.requestBody("direct:myRoute", exchange);
String body=out.getOut().getBody();

为此,您需要将交换模式设置为 InOut。有关模板的更多信息: https://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/ProducerTemplate.html

关于java - Camel 测试模板使用与我发送的交换器不同的交换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33901092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com