有谁知道如何测试路由中不同类型的Collection?

// This processor returns a Collection of 2 Sets
// 1. Set<GoodMessage>
// 2. Set<BadMessage>
.process(new MyGoodBadMessageProcessor())
// Split the result List
.split(body()).choice()
    // How do you test for a Set<GoodMessage>??
    .when(body().isInstanceOf(Set<GoodMessage>)
        .to("direct:good")
    .otherwise()
        .to("direct:bad")
.endChoice()


背景:(如果有人可以看到更好的方法,那么)我有一个处理器,当前工作方式如下:

@Override
public void process(Exchange exchange) throws Exception {
    Message message = exchange.getIn();
    Set<UnknownMessage> unknownMessages = message.getBody(Set.class);
    Set<GoodMessage> goodMessages = new HashSet<GoodMessage>();

    for(UnknownMessage msg: unknownMessages) {
        // Simplified logic here
        if (msg.isGood()) {
            goodMessages.add(msg.getGoodMessage());
        }
    }

    message.setBody(goodMessages);
}


我想更新此内容,使其现在包括用于报告的BadMessage:

@Override
public void process(Exchange exchange) throws Exception {
    Message message = exchange.getIn();
    Set<UnknownMessage> unknownMessages = message.getBody(Set.class);
    Set<GoodMessage> goodMessages = new HashSet<GoodMessage>();
    Set<BadMessage> badMessages = new HashSet<BadMessage>();

    List result = new ArrayList();

    for(UnknownMessage msg: unknownMessages) {
        // Simplified logic here
        if (msg.isGood()) {
            goodMessages.add(msg.getGoodMessage());
        } else {
            badMessages.add(msg.getBadMessage());
        }
    }

    result.add(goodMessages)
    result.add(badMessages)
    message.setBody(result);
}

最佳答案

您无法通过这种方式获得收藏的类型(与骆驼无关)。
更新process方法的方式无需为错误消息创建其他端点。

根据消息类型将其发送到不同端点的一种可能方法是,在检查消息类型并添加标头的选择之前添加处理器。然后,您的选择语句可以基于此标头工作。

关于java - Apache Camel:如何测试Set <CustomObject>的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30647444/

10-10 10:40