当前位置: 首页 > 知识库问答 >
问题:

如何在内容丰富()中使用骆驼的Exchange set属性?

罗允晨
2023-03-14

我有一条骆驼路线,根据一些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();

如果您可以提供一些代码示例,那将很有帮助。

共有1个答案

赵佐
2023-03-14

如果你再往下读一点,你会发现建议你改用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注册表中。 我认为您需要为此特定组件将区

  • 要表现色彩里的浓烈、富足感可藉由组合一个有力的色彩和它暗下来的补色。例如,深白兰地酒红色就是在红色中加了黑色,就像产自法国葡萄园里陈年纯美的葡萄酒,象征财富。白兰地酒红色和深森林绿如果和金色一起使用可表现富裕。这些深色、华丽的色彩用在各式各样的织料上,如皮革和波纹皱丝等等,可创造出戏剧性、难以忘怀的效果。这些色彩会给人一种财富和地位的感觉。 补色色彩组合 原色色彩组合 单色色彩组合 49 3 49