Учитывая структуру, подобную этой:
@Data
public class A {
//..other fields..
private List<B> bs;
}
@Data
public class B {
//..other fields..
private List<C> cs;
}
Я должен обработать список типа A в несколько шагов / маршрутов.Некоторые операции находятся на уровне A, другие на других уровнях, таких как C.
Проблема, которую я пытаюсь решить, заключается в обработке каждого C, получающего A, а затем некоторая логика должна работать с обновленным Aмодель.
Я могу успешно разделить и агрегировать обратно list<C>
, но теперь я застрял, пытаясь восстановить A, учитывая выходные данные для B и C.
Это то, что у меня сейчас:
from("direct:my-A-Item")
.id("direct-a")
.autoStartup(true)
.split(ExpressionBuilder.beanExpression(new CSplitter(), "getBs"), new MyAggregationStrategy())
.streaming()
.split(ExpressionBuilder.beanExpression(new CSplitter(), "getCs"), new MyAggregationStrategy())
.streaming()
.bean(processor, "doStuff")//Working on a since C instance
.end()
.bean(processor, "test") //Here I get the worked List<C>
.end()
//.bean(processor, "thisProcessorNeedsA").end(); //TODO get the original A and the output List<C> so i can make further work on them
Как я могу обновить экземпляры B новым списком C, а затем сделать то же самое для обновления A?
public class CSplitter {
public List<B> getBs(A a) {
return a.getBs();
}
public List<C> getCs(B b) {
return b.getCs();
}
}
public class MyAggregationStrategy implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
Object newBody = newExchange.getIn().getBody();
ArrayList<Object> list = null;
if (oldExchange == null) {
list = new ArrayList<Object>();
list.add(newBody);
newExchange.getIn().setBody(list);
return newExchange;
} else {
list = oldExchange.getIn().getBody(ArrayList.class);
list.add(newBody);
return oldExchange;
}
}
}
Проверка документации и онлайн-ресурсов я не смогнайдите любой пример агрегации, имеющий также тело из предыдущего шага ... любые советы приветствуются:)