У меня есть маршрут, который должен обработать запрос от CXF конечной точки и возвращает результаты в формате JSON:Apache Camel - отправить расщепленные результаты CXF конечной
public class MyRoute extends RouteBuilder
{
// ... Autowired:
// msgRequestProcessor - converts json {string,string} to String of "\n" delimited json string: {string}\n{string}
// RangeProcessor, SingleProcessor - create mongodb Criteria object from json string
// msgTypeMapper - adds corresponding header "msg.type"
@Override
public void configure()
{
from("direct:list")
.process(msgRequestProcessor)
.split(body())
.bean(msgTypeMapper.class)
.choice()
.when(header("msg.type").isEqualTo("single"))
.log("Go to direct:single")
.to("direct:single")
.otherwise()
.log("Go to direct:range")
.to("direct:daterange")
.end()
.to("direct:aggregate");
from("direct:range")
.process(new RangeProcessor());
from("direct:single")
.process(new SingleProcessor());
from("direct:aggregate")
.aggregate(new MyAgg()).header("msg.collection").completionSize(2)
.log("RETVAL: ${body}")
.marshal().json(JsonLibrary.Gson).end();
}
public static final class MyAgg implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange)
{
if (oldExchange == null) {
return newExchange;
}
Criteria oldCriteria = oldExchange.getIn().getBody(Criteria.class);
Criteria newCriteria = newExchange.getIn().getBody(Criteria.class);
Criteria criteria = new Criteria();
criteria.andOperator(oldCriteria, newCriteria);
oldExchange.getIn().setBody(criteria.getCriteriaObject().toString());
return oldExchange;
}
}
}
Все работает отлично, я вижу правильные результаты агрегации и завершение агрегации в журнале
но CXF конечная точка всегда возвращает вывод msgRequestProcessor (до раскола):
{"string"}
{"string"}
пока я ожидаю увидеть объект критериев, преобразованный в строку (что я вижу в журналах).
Любая помощь была бы высоко оценена! Благодарю.
Где находится CXF в вашем маршруте? – Ralf
@ Ralf У меня есть ресурс CXF, который перенаправляет запрос направить: конечная точка списка. – Savash
По умолчанию сплиттер [возвращает исходный обмен] (http://camel.apache.org/splitter.html#Splitter-WhattheSplitterreturns). Поэтому неудивительно, что конечная точка CXF возвращает исходный запрос. Удивительный бит заключается в том, что ваш код агрегации имеет что угодно, чтобы агрегировать вообще. Вы уверены, что это так? – Ralf