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

拆分apache camel后恢复头值

陶博耘
2023-03-14

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

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

代码示例:

<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>

共有2个答案

夏昊
2023-03-14

要保留拆分函数内的标头或属性集,需要使用聚合策略,如果其标头简单且需要避免聚合策略,则在拆分函数之前设置一个以ArrayList为值的交换属性

List<String> list = new ArrayList<>();     
list.add("one");    
exchange.setProperty("list", list); 

在拆分功能内部现在,如果您再次更新此属性,在列表中添加一个项目,您将能够在拆分功能结束后检索它,并且将在每个拆分交换和父交换中可用。

from("direct:main)   
.split(body())  
.to("direct:sub")  
.end().process(ex -> {
System.Out.Println(ex.getProperty("list"));
}).end();


from("direct:sub")  
.process(ex -> {  
List list = exchange.getProperty(list);  
list.add("two");  
exchange.setProperty(list);  
}).end();

输出:[一,二]

濮嘉茂
2023-03-14

您需要定义一个< code>AggregationStrategy。来自Camel Splitter:

拆分器返回什么

Camel 2.3及更新版本:

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

适用于所有版本

您可以通过提供自己的策略作为聚合策略来覆盖此设置。

聚合策略需要检查每个子标记的相应标头集,并将其传递给拆分操作生成的 Exchange 输出消息。

 类似资料:
  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • DynamoDB有备份和恢复功能。文档说明,当您恢复表时,读写容量将与备份时的源表保持相同。 目标表设置了与源表相同的已配置读容量单位和写容量单位,如请求备份时所记录的。 但在这种情况下,目标表的分区总数是多少?原始源表可以有许多具有较小读写容量的分区。这将如何反映?

  • 有人对删除文本中的分隔符有什么建议吗?我正在使用Python,而且还是个初学者。 例如,“嗯,”他说,“我想我可以Rest一下。”在本例中,斜体的“他说”是分隔符,需要删除。然后,引用需要被视为引用中的一个字符串,例如,“好吧,我想我可以Rest一下。”我还没有找到类似的代码,希望有人能给我指出正确的方向。 谢谢

  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 我在尝试将此代码提交给hackerrank时出现以下错误:https://www.hackerrank.com/challenges/contacts/problem: 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:结果为1。联系人(Solution.java:31)位于Solution。main(Solution.java:66) 然

  • MySQL的恢复 常用命令 利用source命令恢复数据库 利用mysql命令恢复(标准) gzip备份文件包的解压方式 常用命令 去除多余注释查看备份数据 egrep -v "#|\*|--|^$" ~/test.sql 利用source命令恢复数据库 进入到mysql数据库客户端,mysql -uroot -p登录后,使用source命令,后面跟脚本文件 source all.sql # 默认