Java ApacheCamel(版本>;=2.16):使用wireTap将消息路由到Springbean
我刚从Camel 2.12升级到2.19.1,我的Java ApacheCamel(版本>;=2.16):使用wireTap将消息路由到Springbean,java,spring,apache-camel,Java,Spring,Apache Camel,我刚从Camel 2.12升级到2.19.1,我的wireTap表达式出现了问题: from("direct:start") .wireTap("bean:myWireTapBean") .to("bean:doSomething"); 此代码在版本2.15之前运行良好,但从2.16开始,在Camel上调用myWireTapBean,并尝试将void结果解释为要调用的动态端点URI,并生成此异常: Stacktrace: org.apache.camel.NoTypeConve
wireTap
表达式出现了问题:
from("direct:start")
.wireTap("bean:myWireTapBean")
.to("bean:doSomething");
此代码在版本2.15之前运行良好,但从2.16开始,在Camel上调用myWireTapBean
,并尝试将void
结果解释为要调用的动态端点URI,并生成此异常:
Stacktrace: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: null to the required type:
java.lang.String with value null
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:198)
at org.apache.camel.processor.SendDynamicProcessor.resolveEndpoint(SendDynamicProcessor.java:144)
at org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:104)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
at org.apache.camel.processor.WireTapProcessor$1.call(WireTapProcessor.java:137)
at org.apache.camel.processor.WireTapProcessor$1.call(WireTapProcessor.java:133)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
作为一种解决方法,我可以如下定义路线:
from("direct:start")
.wireTap("bean:myWireTapBean").ignoreInvalidEndpoint()
.to("bean:doSomething");
但是,ignoreInvalidEndpoint()
让我觉得奇怪,因为bean:myWireTapBean
是一个有效的端点
使用
wireTap
的推荐方法是什么?它不将提供的bean解释为一个表达式来计算动态URI,而是将bean用作端点?是的,这有点麻烦,您需要添加一个小路由作为解决方法,并点击一个直接路由,然后调用bean。我已经记录了一个票证,可以让它直接与bean一起工作:因此您可以指定uri是否是动态的。@ClausIbsen感谢您在Camel 2.20.0中添加了dynamicUri(false)
改进