将camel body的值设置为constructor-arg的值

时间:2014-01-03 09:40:43

标签: java apache-camel

我在camel-context.xml中有以下bean声明

<bean id="AmbiguousData" class="java.lang.Exception">
    <constructor-arg index="0" type="java.lang.String" value="${body}" />
</bean>

body的值是在camel中动态设置的。 从日志中我可以验证正文是否正确(“为Test2找到了不明确的数据”),但传递给bean的值是错误的($ {body})。

LOG:

...............

体形:字符串 ,正文:“发现IMSI_Test2的模糊数据” ,CaughtExceptionType:java.lang.Exception,CaughtExceptionMessage:$ {body},StackTrace:java.lang.Exception:$ {body}     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)     在org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)     在org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:121)     在org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280) ..........

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

当弹簧容器启动时,您尝试访问$ {body}的bean只能创建一次。那时你没有任何消息而是驼峰上下文本身正在实例化。

如果你想访问Body of Camel Message,你应该使用annotations来指示camel在运行时注入消息体。

您需要执行以下操作:

import org.apache.camel.Body; public class Foo { public void doSomething(@Body String body) { // do your stuff } 并在camel-context中声明这个bean。