0
//はCamelTestSupport集団を分割するにはどうすればいいですか?
@Produce
private ProducerTemplate template;
@EndpointInject(uri = "mock:out")
private MockEndpoint mock;
@Test
public void testSplitAggregateConvertOrder(){
List<InOrder> inOrderList = new ArrayList<InOrder>();
InOrder inOrder1 = new InOrder();
inOrder1.setId("1");
inOrderList.add(inOrder1);
InOrder inOrder2 = new InOrder();
inOrder2.setId("2");
inOrderList.add(inOrder2);
InOrder inOrder3 = new InOrder();
inOrder3.setId("3");
inOrderList.add(inOrder3);
template.sendBody("direct:start", inOrderList);
Exchange outList = mock.getReceivedExchanges().get(0);
List<OutOrder> outOrderList = outList.getIn().getBody(List.class);
for(OutOrder outOrder : outOrderList){
System.out.println("####### mockResult id : "+outOrder.getId());
}
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
context.getTypeConverterRegistry().addTypeConverter(OutOrder.class, InOrder.class, new MyOrderTypeConverter());
from("direct:start")
.split(body(), new AggregationStrategy() {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) {
List<OutOrder> orders = new ArrayList<OutOrder>();
OutOrder newOrder = newExchange.getIn().getBody(OutOrder.class);
orders.add(newOrder);
newExchange.getIn().setBody(orders);
return newExchange;
}
List<OutOrder> orders = oldExchange.getIn().getBody(List.class);
OutOrder newOutOrder = newExchange.getIn().getBody(OutOrder.class);
orders.add(newOutOrder);
oldExchange.getIn().setBody(orders);
return oldExchange;
}
})
.convertBodyTo(OutOrder.class)
.end() //splitter ends here and the exchange body is now List<OutOrder>
.to("mock:out");
}
};
}
private static class MyOrderTypeConverter extends TypeConverterSupport {
@SuppressWarnings("unchecked")
public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
// converter from inorder to outorder bean
OutOrder order = new OutOrder();
order.setId(Integer.parseInt(((InOrder) value).getId()));
return (T) order;
}
}
private static class OutOrder {
private int id;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
private static class InOrder {
private String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
を拡張私はすべてが返された、結果は{1,2,3}であった{1,2}のように、固定されたリスト・サイズを必要とするが、結果。
結果のサイズが2の場合は、集約を解除します。どんな体が私を助けますか?
ご協力ありがとうございますが、関数MyOrderTypeConverter.convertToは実際に一度に1分以上必要です。私の心の中で、正しい結果が得られたらすぐに壊れます。それを解決するための他の提案があるのでしょうか? – steven