我有一条骆驼路线,可以根据一些ID进行拆分和汇总。检索到ID后,将调用另一个端点,以根据此ID检索项目信息。检索项目信息后,我必须通过在其上调用多个rich()方法来对其进行充实。在第一种富集方法中,我必须执行一些xpath处理,其中我将无法检索将在交换中设置为属性的primaryOrgId值,不必担心xpath处理,我已经解决了这个问题,但是我的问题是当我在第一个填充内设置属性(primaryOrgId)。路线到达第二富集部分时,属性值不会保留。当我记录primaryOrgId值时,“ testValue”的原始值(在direct:createSomeIds路径中设置)是显示的值,而不是在第1个丰富部分中设置的“ changeTheValueHere”。
我正在使用基于保险丝6.2.1的骆驼2.15。
我去了骆驼的站点,并从http://camel.apache.org/content-enricher.html阅读了这一部分。我不确定我是否知道该如何实现...“为此,您必须在 端点URI”。.此文本正在谈论标头,我认为它也适用于交换中的属性。
pollEnrich或rich不访问当前的任何数据 交换意味着在轮询时它不能使用任何现有的 您可能已在Exchange上设置的标头。例如,您不能设置 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();
如果您可以提供一些代码示例,那将很有帮助。
答案 0 :(得分:0)
如果您进一步阅读本书,会发现建议您将RecipientList
与AggregationStrategy
一起使用。
.recipientList("direct:getAdditionalInfo", "direct:getSecondaryInfo")
.aggregationStrategy(new ProjectStrategy())
仅当您要访问FTP上的某些文件或其他文件区域时,端点URI中的文件名设置才适用。
编辑:
我现在看到您需要在第二个浓缩中的第一个浓缩中的财产。但是,如果您不打算在第一个丰富版本中修改消息正文,那么我实际上根本不需要它。
如果您实际上是在修改主体,则仍然可以使用RecipientList
,但可以使用两个单独的主体,每个主体仅调用一个端点。