如何在Camel路由中调用$ {body}上的setter方法?

时间:2013-12-05 15:36:09

标签: apache-camel

我试图在构成通过Camel路由传输的消息的Java bean的主体上设置属性。我尝试了各种方法,例如

    <route>
        ...
        ..
        <transform>
            <simple>${body.label} = ${property.label}</simple>
        </transform>
        ...
        ..
    </route>

在这种特殊情况下,${body}是一个带有setLabel(String label)方法的Java bean,${property.label}是通过其他路由中的其他方式设置的。在这个例子中,结果不是所希望的(我理解为什么),即在变换之后,消息的主体被${body.label} = ${property.label}字符串替换。

我目前的解决方法是手动将变换器编码为Spring bean并在代码中设置Java bean的label属性,但我想知道是否有更简单/更智能的方法来实现这一点,最好是用XML DSL是我用的?

问候,奥拉

2 个答案:

答案 0 :(得分:4)

我不确定是否可以使用simple,但您可以使用groovy执行此操作:

<setBody>
    <groovy>request.body.label = exchange.getProperty('label')
            return request.body
    </groovy>
</setBody>

答案 1 :(得分:0)

也许它可以在未来帮助某人:

据我所知,您可以使用标准的 Java 方法,并在正文中使用 setter 和 getter:

 .split(body())
      .setBody(simple("${body.setLogin('TEST')}"))
 .end()

它在 <split></split> 内工作。也许在另一个街区内。