【问题标题】:recover headers value after split apache camel拆分apache骆驼后恢复标头值
【发布时间】:2014-09-01 14:45:29
【问题描述】:

我有一个 xml,我在其中使用拆分标记在 Spring DSL 中进行处理。 我所做的基本上是在 xml 中搜索一个值,当我找到这个值时,我需要获取另一个标签的值,相同元素的子元素并保存到标题中。这个操作看起来很简单,但我无法在拆分之外恢复我的标题,我需要这样做。我尝试了标题和属性,结果是一样的。

请帮我弄清楚我做错了什么。

代码示例:

<route>
...
<split>
    <xpath>//FatherTag/ChildTag</xpath>
    <to uri="direct:processingRoute"/>
</split>

</route>

<route>
<from uri="direct:processingRoute"/>
<choice>
<when>
<simple>....</simple>
    <setHeader headerName="foo">
        <constant>test</constant>
    </setHeader>
</when>
</choice>

</route>

【问题讨论】:

  • 首先,您确定拆分内的标题是由您的选择/何时设置的?您有一些跟踪级别的日志供我们查看吗?我怀疑这是因为拆分后,生成的 Exchange 是拆分处理的最后一个交换,除非您使用聚合策略
  • 好吧,我最终创建了一个处理器并在 java 中进行了 xml 解析。不过谢谢,下次我会选择 AggregationStrategy。

标签: xml apache-camel


【解决方案1】:

您需要定义一个AggregationStrategy。来自Camel Splitter

拆分器返回的内容

Camel 2.3 及更新版本

默认情况下拆分器将返回原始输入消息。

适用于所有版本

您可以通过将自己的策略提供为 AggregationStrategy 来覆盖它。

您的AggregationStrategy 需要检查每个子标签的相应标头集,并将其传递到生成的 Exchange 输出消息中以进行拆分操作。

【讨论】:

  • 在骆驼论坛中,我找到了一些相关问题的答案,说如果我使用属性而不是标题,我将能够在拆分之外获取值。我试过但没有成功。有什么想法吗?还是我应该继续使用 AggregationStrategy。
  • 正如我上面所说,我使用处理器解决了它。但是,很高兴知道正确的方法。太棒了!
  • @king_nl_ds 我不认为使用属性会有所作为。属性与特定的Exchange 对象相关联。拆分时,camel 为每个部分创建单独的 Exchange 对象。除非您使用AggregatorStrategy 将所有子 Exchange 合并到一个聚合 Exchange 中,否则将无法在拆分操作之外访问在任何子 Exchange 上添加属性,这将成为拆分操作的输出。
  • 实际上,查看 Camel 2.13.2 中 Splitter 处理器的源代码,看起来它可能将属性从子 Exchange 传播到输出 Exchange,而不管AggregationStrategy.
  • 在我的测试中它没有传播。我想就像你之前说的那样,将创建一个独立的交换来进行拆分。
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多