Camel 拆分器EIP可以拆分HashMap吗?它必须是列表吗

voase2hg  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(157)

我正在尝试使用 Camel 分割器EIP来分割唐飞,但它似乎无法运作,也无法分割唐飞。除非,我遗漏了一些东西,...如果可以的话,请建议如何分割。
谢谢你!2!3!
用 Camel EIP分割器分割Map。

<process id="getassetlisting" ref="getAssetListing" />
<split id="as2"
    strategyRef="tsAggregationStrategy" streaming="true">
    <simple>${body}</simple>
    <log id="sl2" loggingLevel="INFO" message="Split Line ${body}"/>
</split>

获取资产列表代码段

public void process(Exchange exchange) throws Exception {

    log.info("Get Asset Listing :: Start");

    custkey = (String)exchange.getIn().getHeader("CUSTKEY");
    log.info("GetAssetListing - CUSTKEY: " + custkey);
    queryRecordToDB(custkey);

    for(Map.Entry m:assetMap.entrySet()){    
       log.info("Key: " + m.getKey() + " Value: " + m.getValue());    
    }
    exchange.getIn().setBody(assetMap);

    log.info("Get Asset Listing :: finish");
   }

预期:分割Map的输入交换
入站至分离器:102_电机= 652 e4041 - 3c 2b-410 a-8ba 0 - 12 a2 a53 ec 730,BC 101_压缩机= 50480 a32-cd 65 - 4 b 93 - 94 f8 - 4 ba 50 cf 6dec 5,DC 102_膨胀机= cd 413 f1 e-816 f-466 d-a706-b87 ead 050 bac,BC 901_蒸汽_汽轮机= b4 acecbb-fac 1 - 4a 99-ab 95 - 24 e1 bc 7 f4286,101 A_压缩机= bbd 0a 7 d 7-cb 11 - 4a 64 -9168-b13 ece 4 b215 d,DCM 101 B_电机= 12819 b1 c-8dec-49 e6 - 82 cd-72 e0 de 36331 f,BCM 901_发电机= 96 de 09 f5 -6dac-458 f-bcaa-6d 67 a340 e731,BCM 101_电机= 6cf 41883 - 36 c1 - 4 eca-8325- 54588982 bdc 8,DC 901_蒸汽涡轮机= 27 f68800-e9 d2 - 4f 33-b4 e5 - 9d 2031 eaa 60 b,BCG 101_齿轮箱= 49366 bcc-bb 6a-426 f-8 c5 c-6d 65 d 675 ac 90,压缩机= 21 a60 cce-094 d-4844-b448-e9 a955 de 418 f,BC 102压缩机=49380230- 99 eb-4fee-a9 a3-e187 e4 c658 ee,DCG 901齿轮箱= d 015 e136 -1110- 4 b6 a-a9 d2 - 48 dd 2 ebc 8 c81,齿轮箱型号
预期的分割输出
扩展器=
蒸汽透平机
DCM 101 A_电机= 6 eea 4f 40 -9114- 491 d-b2 fb-34 f7 e9 b122 de
BCG 901_齿轮箱=
电机型号:
BC 101_压缩机= 50480 a32-cd 65 - 4 b 93 - 94 f8 - 4 ba 50 cf 6十月五日
蒸汽涡轮机= 96 de 09 f5 -6dac-电机_汽轮机_汽轮机_齿轮箱_压缩机_压缩机压缩机_齿轮箱=

dtcbnfnu

dtcbnfnu1#

你可以和 Camel 分开任何你想要的:-)
老实说,我从来没有用Map尝试过,但是如果它不被支持,你可以实现一个Bean来按照你想要的方式做
在 Camel 路线中,您只需简单地说

.split().method("mySplitterBean", "splitBody")

您的实施

public class MySplitterBean {
    public Map<String, String> splitBody(String body) {
    .... your splitting logic
    }
}
cnh2zyt3

cnh2zyt32#

camel已为Map拆分此行为为Map.Entry并返回Node.class

from("timer:test?repeatCount=1")
        .process(e -> {
            Map<String, List<String>> map = new HashMap<>();
            map.put("name", List.of("name", "name1","namo"));
            map.put("surname", List.of("surname"));
            map.put("age", List.of("age", "age1"));
            e.getIn().setBody(map);
        })
        .split(body())
        .setBody(simple("${body.value}"))
        .log("${body.class} ${body.size} ${body}");

原木

:class java.util.ImmutableCollections$List12 1 surname
:class java.util.ImmutableCollections$ListN 3 name,name1,namo
:class java.util.ImmutableCollections$List12 2 age,age1

相关问题