我遇到以下问题:
// from("cxf:....")...
from("direct:start").process(startRequestProcessor) // STEP 1
.choice()
.when(body().isNull())
.to("direct:finish")
.otherwise()
.split(body()) // STEP 2
.bean(TypeMapper.class) // STEP 3
.log("Goes to DynamicRouter:: routeByTypeHeader with header: ${headers.type}")
.recipientList().method(Endpoint1DynamicRouter.class, "routeByTypeHeader") // STEP 4
.ignoreInvalidEndpoints();
from("direct:endpoint2") // STEP 6
.log("Goes to DynamicRouter::routeByCollectionHeader with header: ${headers.collection}")
.recipientList().method(Endpoint2DynamicRouter.class, "routeByCollectionHeader")
.ignoreInvalidEndpoints();
from("direct:endpoint1.1") // STEP 5
.process(new DateRangeProcessor())
.to("direct:collections");
from("direct:endpoint1.2") // STEP 5
.process(new SingleProcessor())
.to("direct:collections");
from("direct:endpoint2.2") // STEP 7
.aggregate(header("collection" /** endpoint2.2 */), CollectionAggregationStrategy)
.completionSize(exchangeProperty("endpoint22"))
.process(new QueryBuilderProcessor())
.bean(MyService, "getDbCriteria")
.setHeader("collection", constant("endpoint2.1"))
.to("direct:endpoint2.1").end();
from("direct:endpoint2.1") // STEP 8
.aggregate(header("collection" /** endpoint2.1 */), CollectionAggregationStrategy)
.completionSize(exchangeProperty("CamelSplitSize"))
.to("direct:finish").end();
from("direct:finish")
.process(new QueryBuilderProcessor())
.bean(MyRepository, "findAll")
.log("ResponseData: ${body}").
marshal().json(JsonLibrary.Gson).end();
路线
我可以在调试器中看到有效的响应对象,但无论如何我都收到错误:
找不到类java.util.HashSet,ContentType:application / json
的消息正文编写器
问题不在于响应对象,因为它与其他路由一起使用,并且它不包含HashSet。
我的猜测是路由发送到输出的HashSet创建了第1步......
我的问题是:
recipList()尝试转发 消息到无效端点(我必须使用.ignoreInvalidEndpoints()来避免异常):
org.apache.camel.NoSuchEndpointException:找不到端点: org.springframework.data.mongodb.core.query.Criteria@20f55e70,请 检查你的classpath包含所需的Camel组件jar。
非常感谢任何帮助! 感谢。
答案 0 :(得分:2)
我觉得很奇怪,但.aggregate()函数没有回复交换。它使用您的聚合策略,但始终回复传入的交换。阅读文档时不太清楚,但您必须使用聚合策略和split()才能返回交换。