Я пытаюсь использовать Пополните EIP верблюжьего с клиентами AggregationStrategy т.е.Camel Обогатить и AggregationStrategy
from("direct:xyz")
.setHeader("...","")
.enrich("http://localhost:myservice", new AggregationStrategy() {
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
.....
}
});
Выхода из HTTP конечной точки возвращают ответ XML. Я бы хотел, чтобы это было упорядочено и установлено на тело newExchange
.
В настоящее время я делаю это путем введения JaxbDataFormat
к AggregationStrategy
и вызову метода маршализации .. т.е.
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
AnotherObj obj = dataFormat.unmarshall(newExchange,
newExchange.getIn().getBody(InputStream.class));
Parentobj test = oldExchange.getIn().getBody(ParentObj.class)
test.setobj(obj)
oldExchange.getIn().setBody(test);
return oldExchange;
}
Есть ли лучший способ сделать это?
Мое требование - не потерять то, что есть на Бирже. i.e Если 'oldExchange' до вызова enrich имеет объект« A »в Body, то после вызова конечной точки HTTP, которая возвращает OutputStream. Затем последующие шаги должны иметь объект «C» (имеющий объект «A» и «Unmarshalled Object» B, полученный из Outputstream). Все это сейчас можно сделать только в 'AggregationStrategy'. API для обогащения не предоставить опцию для указания 'dataformat' для' newExchange'. Если бы объект «C» мог быть удален непосредственно из «newExchange» .. –
Возможно, вам следует уточнить, что в вашем исходном сообщении в качестве утверждения: «Выход из HTTP Конечная точка возвращает ответ XML. Я бы хотел, чтобы это было упорядочено и установлено в теле нового обмена. »Заставляет поверить иначе. –