有谁知道如何测试路由中不同类型的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/