【问题标题】:set the value of camel body as value of constructor-arg将camel body的值设置为constructor-arg的值
【发布时间】:2014-01-20 22:38:44
【问题描述】:

我在 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})。

日志:

.......

正文类型:字符串 , 正文:“为 IMSI_Test2 找到不明确的数据” , CaughtExceptionType:java.lang.Exception, CaughtExceptionMessage:${body}, StackTrace:java.lang.Exception: ${body} 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 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) ..........

我该如何解决这个问题?

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

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

    如果您想访问 Camel 消息的正文,那么您应该使用 annotations 指示骆驼在运行时注入消息正文。

    您需要执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2015-05-16
      • 2015-11-25
      • 1970-01-01
      • 2020-02-27
      • 2021-06-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多