Camel AggregatonStrategy错误结果
我使用CAMEL来汇总两个来源的响应,一个是xml和其他json。最初,我扼杀了这些反应,并且从文件中获取它们。 目标是汇总来自两个来源的回复。Camel AggregatonStrategy错误结果
我的聚合路线是这样的
from("direct:fetchProfile") .multicast(new ProfileAggregationStrategy()).stopOnException()
.enrich("direct:xmlProfile")
.enrich("direct:jsonProfile")
.end();
我“直接:xmlProfile”路线看起来像 -
from("direct:xmlProfile") .process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
String filename = "target/classes/xml/customerDetails.xml";
InputStream fileStream = new FileInputStream(filename);
exchange.getIn().setBody(fileStream);
}
})
.split(body().tokenizeXML("attributes", null))
.unmarshal(jaxbDataFormat)
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
Profile legacyProfile = exchange.getIn().getBody(Profile.class);
// some more processing here
exchange.getIn().setBody(legacyProfile);
}
});
在上面的路线我读从文件的XML,然后使用JAXB转换器将感兴趣的元素映射到由“配置文件”表示的类中。呼叫此路由后,CAMEL调用ProfileAggregationStrategy。此代码是 -
public class ProfileAggregationStrategy implements AggregationStrategy{ @Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
// this is the problematic line
Profile newProfile = newExchange.getIn().getBody(Profile.class);
if (oldExchange == null){
return newExchange;
} else {
Profile oldProfile = oldExchange.getIn().getBody(Profile.class);
// code to copy merge oldProfile with newProfile
return oldExchange;
}
}
}
问题在于标记为'有问题的行'的行。即使在路由'direct:xmlProfile'的最后阶段,我已明确地将一个对象放入交换体中,ProfileAggregationStrategy中的newExchange仍然显示Body是iostream类型。
回答:
阅读关于分离器eip的文档。
- http://camel.apache.org/splitter
由于分离器的输出为输入,除非你指定的聚合策略,分离器,你可以决定输出应该是什么。例如,如果你想使用最后一个拆分元素,那么你可以使用UseLastestAggregrationStrategy
。
以上是 Camel AggregatonStrategy错误结果 的全部内容, 来源链接: utcz.com/qa/265499.html