java - 在 Apache Camel 中访问拆分 entrySet 的主体

标签 java split hashmap apache-camel

我的消息正文包含一个 HashMap。

我通过它的 entrySet 拆分了这条消息:

.from(FROM)
   .aggregate(...)

   // create an iterable
   .transform(simple("${in.body.entrySet()}"))

   // split over the Iterable
   .split(body())
      .process(new ReadMapEntry())
      .to(TO)
   .end()
.end();

现在尝试在处理器中检索这些条目。我得到的最接近的是试图转换这个。我找到了使用 ArrayList 的类似示例,但我无法让它们为此工作......在这种工作中,但由于 Map.Entry 的泛型,它触发了未经检查的强制转换警告。
public void process(final Exchange ex) throws Exception
{     
   Map.Entry<A, B> entry = (Map.Entry<A, B>) ex.getIn().getBody(Map.Entry.class);
   (...)
}

解决方案

我的目标是避免与转换继承类相关的警告。我最终使用了 simple最后的关键词。这样我可以将映射的值传递给处理器(从而避免未经检查的强制转换警告)并通过标题访问键。
.from(FROM)
   .aggregate(...)

   .split(simple("${in.body.entrySet}"))
      .setHeader(KEY_VALUE_AS_HEADER, simple("${body.getKey}"))
      .setBody(simple("${body.getValue}"))
      .process(new ReadMapEntry())
      .to(TO)
   .end()
.end();
public void process(final Exchange ex) throws Exception
{     
   A value = ex.getIn().getBody(A.class);
   B key = ex.getIn().getHeader(KEY_VALUE_AS_HEADER, B.class);
   (...)
}

最佳答案

您可以尝试使用简单的 Bean 并直接注入(inject)具有正确类型的 Body。

// simple POJO, does not implement Processor interface
public void readMap(@Body Map.Entry<A, B> mapEntry) {     
     // use mapEntry (message body) directly instead of extracting it from Exchange
     mapEntry.[whatever]
}

然后你在你的 route 调用它
.method(new ReadMapEntryBean()) // if Bean contains only 1 method

或者
.method(new ReadMapEntryBean(), "readMap") // if there are other methods

处理器接口(interface)相当陈旧、笨拙且难以测试。 POJO 更容易使用,并且它们与 Camel 配合得很好。

Parameter Binding AnnotationsBean Integration来自 Camel Docs 以获取更多详细信息

关于java - 在 Apache Camel 中访问拆分 entrySet 的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953704/

相关文章:

java - 在整数数组中查找缺失的数字

Java——画一个三角形

java - 如果我有大量空闲内存分配给 JVM,为什么会得到 'java.lang.OutOfMemoryError: GC overhead limit exceeded'?

javascript - 正则表达式javascript拆分

string - 按分隔符拆分字符串并包含分隔符 - Common Lisp

sql - MS SQL - 计算字段中单词的出现次数

java - 如何在 Java 中使用单个键的值列表形成 Hashmap

java - 如何在 Java 中创建值的组合?

java - 如何从以下响应 : mapDATA=={title=I Talk, id=5df, order_no=null, type=i_talk, is_speaker=0} 中获取值?

java - 如何通过保留顺序来删除链表中的重复项