Apache camel 使用bean()在主体上设置属性

Apache camel 使用bean()在主体上设置属性,apache-camel,Apache Camel,我试图在exchange的主体上设置一个名为“articleId”的属性,我认为最明确的方法是使用bean()。然而,我不能让它工作。当我的路线中出现以下情况时: .bean(body(Article.class), "setArticleId(${header.articleId})") 我收到以下错误消息: 原因:org.apache.camel.component.bean.MethodNotFoundException:在类型为org.apache.camel.builder.Valu

我试图在exchange的主体上设置一个名为“articleId”的属性,我认为最明确的方法是使用
bean()
。然而,我不能让它工作。当我的路线中出现以下情况时:

.bean(body(Article.class), "setArticleId(${header.articleId})")
我收到以下错误消息:

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


我的解决方案是使用一个
处理器()
和几行代码,以便从标题值设置articleId属性,但对我来说,这似乎有些过分。

如果您不知道如何告诉camel要调用bean的哪个方法,我想您需要花一些时间来完成

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

setProperty(“articleId”,body())


做这类工作。

我一直在向骆驼用户抱怨,没有一个好的方法来做这项工作。现在,我是如何解决这个问题的:

.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    

我读了那一页,这就是我如何想出我目前的计划。本质上,我的交换有一个主体,它包含一篇文章POJO。在那篇文章POJO中,我有一个“articleId”属性设置器。我想做的是设置
articleId
属性和交换头的值(即
articleId
),您只需将主体和交换传递给您的Bean方法。