我有一条骆驼路线,根据一些id进行拆分和聚合。当检索到一个id时,调用另一个endpoint来根据这个id检索项目信息。在检索项目信息之后,我必须通过调用多个enrich()方法来丰富它。在第一个enrich方法中,我必须做一些xpath处理,其中我将能够检索一个primaryOrgId值,我将在交换中将其设置为属性,不要担心xpath处理,我已经解决了这个问题,但我的问题是当我在第一个enrich中设置属性(primaryOrgId)时。当路线到达第二个enrich部分时,属性值不会被持久化。当我记录primaryOrgId值时,显示的是“testValue”的原始值(在direct:createSomeIds路径中设置),而不是在第一个enrich部分中设置的“changeTheValueHere”。
我用的是基于Fuse 6.2.1的Camel 2.15。
我去了骆驼网站,从 http://camel.apache.org/content-enricher.html 那里读了这部分.我不确定我是否了解如何实现...“为此,您必须在endpoint URI 中设置文件名”..这篇文章是在谈论标题,我认为它也适用于交易所中的属性。
pollEnrich或Enrich不会访问当前交易所的任何数据,这意味着在轮询时,它不能使用您可能在交易所设置的任何现有标头。例如,不能在Exchange.FILE_NAME标头中设置文件名,而使用 pollEnrich 仅使用该文件。为此,必须在终结点 URI 中设置文件名。
这是我的代码:
from("direct:createSomeIds")
.routeId("createSomeIds")
.process(new IdCreatorProcessor()
.setProperty("primaryOrgId").constant("testValue")
.split(xpath("/TempProjects/TempProject/Code/text()").namespaces(ns) , new IdStrategy())
.to("direct:splitRouteById")
.end();
from("direct:splitRouteById")
.routeId("splitRouteById")
.to("direct:getProjectByID")
.to("xquery:template/AllProjectToSingleProject.xq") //xquery template
.convertBodyTo(Project.class)
.enrich("direct:getAdditionalInfo", new ProjectStrategy(ProjectStrategy.AggregatorType.AdditionalInfo))
.enrich("direct:getSecondaryInfo", new ProjectStrategy(ProjectStrategy.AggregatorType.SecondaryInfo))
.end();
from("direct:getAdditionalInfo")
//some xpath stuff here
.setProperty("primaryOrgId").constant("changeTheValueHere")
.end();
from("direct:getSecondaryInfo")
.log("Value of primaryOrgId = " + "${exchangeProperty.primaryOrgId}")
.end();
如果您可以提供一些代码示例,那将很有帮助。
如果你再往下读一点,你会发现建议你改用RecipientList
和聚合策略
。
.recipientList("direct:getAdditionalInfo", "direct:getSecondaryInfo")
.aggregationStrategy(new ProjectStrategy())
终结点 URI 中的文件名设置仅在要访问 FTP 上的某个文件或其他文件区域时才适用。
编辑:
我现在看到你需要从第一次丰富到你的第二次丰富中的财产。但是,如果您没有在第一次扩充中修改消息正文,那么我实际上根本不认为需要它。
如果您实际上正在修改正文,那么您仍然可以使用 RecipientList,但您可以使用两个单独的 RecipientList
,每个终结点中仅调用一个终结点。
我使用deadLetterChannel来处理异常,并将它们发送到错误队列。 是否可以使用其他邮件标头来丰富邮件?还是我必须为此使用 onException?
问题内容: 我正在开发非OSGI应用程序,我需要更新骆驼路线中使用的某些属性的值(已加载BridgePropertyPlaceHolder)。所以我认为: 要使用酷炫的管理控制台Hawtio,以便使用JMX更新骆驼 创建一个将更新属性..的JMX MBean。 我成功创建了MBean操作并使用JMX对其进行了调用,但是我不知道如何更新依赖于这些属性的骆驼路线。 有没有一种方法可以从外部更新骆驼上下
这似乎应该很简单,原谅我的双关语。我正在尝试在一个spring DSL路由中记录一个camel报头。我已经看到了Java DSL的答案,但我一直在徒劳地寻找如何让它在spring DSL中工作。我试过了: 以及: 以及其他一些排列/变体,但所有这些都只是逐字记录该文本(即,它们不替换实际的标题名称)。 我错过了什么? 更新:这是我的xml文件的大部分:
我正在构建一个将订单路由到订单管理系统的示例实现。路由的入站是具有两个标识符的交换,一个用于客户 ID,另一个用于目录项 ID。然后,我将入站交换的主体转换为我的订单域对象。然后,我的目标是调用内容丰富器模式,一次用于聚合来自客户的数据,一次用于聚合来自目录项的数据。 我的路线是: 我得到的例外是: 注意我使用的是最新的camel,2.17.1。我的问题是,如果我得到一个主体是JSON格式的交换,
问题内容: 我有骆驼休息API。我试图使用apache骆驼框架创建IAM用户。代码像这样-> 我收到此错误。正确的做法是什么?它在骆驼文档中显示使用这样的URL 。我们怎样看待呢? 问题答案: 该示例中报告的iamClient(#amazonIAMClient)是IAMClient的一个实例,您需要使用绑定名称amazonIAMClient将其放入Camel注册表中。 我认为您需要为此特定组件将区
我正在使用Undertow进行设置和应用程序,我已经为静态文件设置了ResourceHandler,以及apache camel用来公开rest服务的Servlet。 我已经在应用程序容器中使用spring和servlet3.0实现了这一点。 在扩展组织的类中。springframework。网状物servlet。支持AbstractAnnotationConfigDispatcherServle