It looks like your recipientList just has one url, and it makes sense that the 
old exchange is null. Please add more endpoint url into the recipientList, you 
should be able to see the old exchange which is not null.

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On April 2, 2014 at 8:25:38 AM, a746076drdrb (a746...@drdrb.net) wrote:
> Hello,
>  
> I try to use dynamic endpoint uri with recipientList and then combine old
> body with the new one, to enrich the message However in
> AggregationStrategy.aggregate method the
> oldExchange is null.
>  
> I suppose recipientList clears the old body. Is there a way to combine two
> exchanges after recipientList? The test throwing
> IllegalArgumentException("oldExchange is null"):
>  
>  
>  
> package com.mycompany.cameltest;
>  
> import org.apache.camel.Exchange;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.processor.aggregate.AggregationStrategy;
> import org.apache.camel.test.junit4.CamelTestSupport;
> import org.junit.Test;
>  
> public class MyRouteBuilderTest extends CamelTestSupport {
>  
> @Override
> protected RouteBuilder createRouteBuilder() throws Exception {
> return new RouteBuilder() {
> @Override
> public void configure() throws Exception {
> from("direct:start")
> .recipientList(simple("${body.url}"))
> .aggregationStrategy(new AggregationStrategy() {
>  
> @Override
> public Exchange aggregate(Exchange oldExchange,
> Exchange newExchange) {
> if (oldExchange == null) {
> throw new
> IllegalArgumentException("oldExchange is null");
> }
> String newBody =
> newExchange.getIn().getBody(String.class);
> PojoObject pojo =
> oldExchange.getIn().getBody(PojoObject.class);
> pojo.setResult(newBody);
> newExchange.getIn().setBody(pojo);
> return newExchange;
> }
> });
>  
> }
> };
> }
>  
> @Test
> public void testConfigure() {
> context.setTracing(Boolean.TRUE);
> PojoObject pojo = new PojoObject();
> pojo.setUrl("mock:http");
> template.sendBody("direct:start", pojo);
> }
>  
> public class PojoObject {
>  
> private String url = "http://foo";;
> private Object result;
>  
> public String getUrl() {
> return url;
> }
>  
> public void setUrl(String url) {
> this.url = url;
> }
>  
> public Object getResult() {
> return result;
> }
>  
> public void setResult(Object result) {
> this.result = result;
> }
>  
>  
> @Override
> public String toString() {
> return "PojoBody{" + "url=" + url + '}';
> }
>  
> }
>  
> }
>  
>  
>  
>  
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/How-to-enrich-with-recipient-list-tp5749644.html
>   
> Sent from the Camel - Users mailing list archive at Nabble.com.
>  

Reply via email to