gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:27:55 25 4
gpt4 key购买 nike

我的消息正文包含一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com