使用bean()在body上设置属性

时间:2013-07-17 19:50:45

标签: apache-camel

我正在尝试在交易所的主体上设置一个名为“articleId”的属性,我认为最明确的方法是使用bean()。但是,我无法让它发挥作用。当我的路线中有以下内容时:

.bean(body(Article.class), "setArticleId(${header.articleId})")

我收到此错误消息:

  

引起:org.apache.camel.component.bean.MethodNotFoundException:在bean上找不到名称为:setArticleId($ {header.articleId})的方法:bodyAs [com.example.model.Article]类型:org .apache.camel.builder.ValueBuilder

我的解决方案是使用processor()和几行代码来从标头值设置articleId属性,但对我来说似乎有些过分。

2 个答案:

答案 0 :(得分:1)

我一直在抱怨骆驼用户没有好办法做到这一点。现在我要解决这个问题:

.setHeader("dummy").ognl("request.body.articleId = request.headers.articleId")

这需要添加camel-ognl依赖。

更新

实际上,还有一个语言端点可以在没有setHeader的情况下执行此操作,但您必须说transform = false,否则它会用结果替换您的身体:

.to("language:ognl:request.body.articleId = request.headers.articleId?transform=false") // remember ?transform=false    

答案 1 :(得分:0)

我认为你需要花一些时间来浏览this page,如果你不知道如何告诉camel你想要它调用的bean的哪个方法。

如果您只想设置exchange属性,可以使用DSL

  

setProperty(“articleId”,body());

做这种工作。