我在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) ..........
如何解决此问题?
答案 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。