You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Stan Lewis <ga...@gmail.com> on 2010/01/22 13:57:31 UTC
Re: Aggregator's not returning combined exchanges, only returns last
exchange
Can you post what you're doing in your aggregation strategy?
On Fri, Jan 22, 2010 at 4:05 AM, lekkie <le...@gmail.com> wrote:
>
> Hi,
>
> I want to combine messages from 2 different exchanges into a single
> exchange, from the EIP patterns aggregation strategy seems to be right
> pattern to use.
>
> However, after reading the doc (http://camel.apache.org/aggregator.html), I
> followed the instructns but my aggregation strategy only returns the last
> exchange, even though I specifically configured it to send messages only
> when the outbatchsize is 2.
>
> I implemented a custom aggregationstrategy with shoulld combine my exchanges
> into one. I log the event in the class and it works fine, what is beyond me
> is why it returns only the last exchange.
>
>
> See my config here:
> <bean id="myAggregatorStrategy" class="org.tempuri.MyAggregationStrategy"/>
>
> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"
> trace="true">
> <route>
> <from uri="direct:RequestProcessor" />
> <to uri="xslt:requestToSOAP.xsl"/>
> <wireTap uri="direct:AggregatorServices"/>
> <to uri="xslt:requestToManager.xsl"/>
> <convertBodyTo type="javax.xml.transform.dom.DOMSource" />
> <to uri="nmr:{http://services.locator/}Service:ServicesPort"/>
> <to uri="direct:AggregatorServices"/>
> </route>
>
> <route>
> <from uri="direct:AggregatorServices" />
> <aggregate strategyRef="myAggregatorStrategy" outBatchSize="2">
> <correlationExpression>
> <constant>true</constant>
> </correlationExpression>
> <to uri="direct:ProcessorServices"/>
> </aggregate>
> </route>
>
> <route>
> <from uri="direct:ProcessorServices" />
> <to uri="log:Response"/>
> </route>
> </osgi:camelContext>
>
> log:Response only print out response from <to
> uri="nmr:{http://services.locator/}Service:ServicesPort"/>.
>
> Meanwhile, the log inside myStratRef (myAggregatorStrategy), which I ask to
> concatenate the old & new exchanges shows both exchanges were concatenated.
> How do I get this concatenated exchange to be sent (to log:Resposne)?
>
> Regards.
> --
> View this message in context: http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27270355.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
Re: Aggregator's not returning combined exchanges, only returns last
exchange
Posted by Stan Lewis <ga...@gmail.com>.
Instead of outBatchSize=2 did you try batchSize=2 maybe? Also does it
perhaps work properly without that wiretap?
On Fri, Jan 22, 2010 at 10:41 AM, lekkie <le...@gmail.com> wrote:
>
> This is what comes form my log:
>
> 11:38:31,370 | INFO | 0: Batch Sender | MyAggregationStrategy |
> rg.tempuri.MyAggregationStrategy 23 | new: Exchange[Message:
> StringSource[<soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><_ns_:RequestResponse
> xmlns:_ns_="http://services.locator/"><return
> xmlns:tns="http://services.locator/"><code>-1</code><message>Unknown
> error</message></return></_ns_:RequestResponse></soap:Body></soap:Envelope>]]
> 11:38:31,370 | INFO | 0: Batch Sender | MyAggregationStrategy |
> rg.tempuri.MyAggregationStrategy 30 | newly formed: Exchange[Message:
> <?xml version="1.0" encoding="UTF-8"?>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
> <soap:Body>
> <kxml>
> <request>
> <amountText>230</amountText>
> <sellAccSelBox>current</sellAccSelBox>
> </request>
> </kxml>
> </soap:Body>
> </soap:Envelope>
> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><_ns_:RequestResponse
> xmlns:_ns_="http://services.locator/"><return
> xmlns:tns="http://services.locator/" ><code>-1</code><message>Unknown
> error</message>xmlns:xsi="... [Body clipped after 1000 chars, total length
> is 1301]]
>
>
> In the log above, myaggregationstrategy prints the concatenated message, but
> the problem is that the printed exchange is not returned to <from
> uri="direct:ProcessorServices" />, only the last exchange gets to <from
> uri="direct:ProcessorServices" />.
>
> I hope this is clear.
>
>
>
>
>
> Stan Lewis-3 wrote:
>>
>> Hmmm, I tested your aggregator code as-is on 2.2-SNAPSHOT here and it
>> works fine:
>>
>> 2010-01-22 09:41:18,444 [0: Batch Sender] INFO
>> JoinStringAggregatorTest - New: Exchange[Message: one]
>> 2010-01-22 09:41:18,444 [0: Batch Sender] INFO
>> JoinStringAggregatorTest - old: Exchange[Message: one]
>> 2010-01-22 09:41:18,445 [0: Batch Sender] INFO
>> JoinStringAggregatorTest - new: Exchange[Message: two]
>> 2010-01-22 09:41:18,445 [0: Batch Sender] INFO
>> JoinStringAggregatorTest - newly formed: Exchange[Message:
>> onetwo]
>> 2010-01-22 09:41:18,800 [0: Batch Sender] INFO AGGREGATION_RESULT
>> - Exchange[BodyType:String, Body:onetwo]
>>
>> What version are you running there, can you try the latest snapshot?
>>
>> On Fri, Jan 22, 2010 at 8:39 AM, lekkie <le...@gmail.com> wrote:
>>>
>>> See code below:
>>>
>>> package org.tempuri;
>>>
>>> import org.apache.camel.Exchange;
>>> import org.apache.camel.Header;
>>> import org.apache.camel.Message;
>>> import org.apache.camel.processor.aggregate.AggregationStrategy;
>>> import org.apache.commons.logging.Log;
>>> import org.apache.commons.logging.LogFactory;
>>>
>>> public class MyAggregationStrategy implements AggregationStrategy {
>>>
>>> private static final transient Log LOG =
>>> LogFactory.getLog(MyAggregationStrategy.class);
>>>
>>> public Exchange aggregate(Exchange oldExchange, Exchange
>>> newExchange)
>>> {
>>>
>>> if (oldExchange == null)
>>> {
>>> LOG.info("old is null only new available");
>>> LOG.info("New: " + newExchange);
>>> return newExchange;
>>> }
>>>
>>> LOG.info("old: " + oldExchange);
>>> LOG.info("new: " + newExchange);
>>>
>>> Message newIn = newExchange.getIn();
>>> String oldBody =
>>> oldExchange.getIn().getBody(String.class);
>>> String newBody = newIn.getBody(String.class);
>>> newIn.setBody(oldBody + newBody);
>>>
>>> LOG.info("newly formed: " + newExchange);
>>>
>>> return newExchange;
>>> }
>>>
>>>
>>> }
>>>
>>>
>>>
>>>
>>> Stan Lewis-3 wrote:
>>>>
>>>> Can you post what you're doing in your aggregation strategy?
>>>>
>>>> On Fri, Jan 22, 2010 at 4:05 AM, lekkie <le...@gmail.com> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I want to combine messages from 2 different exchanges into a single
>>>>> exchange, from the EIP patterns aggregation strategy seems to be right
>>>>> pattern to use.
>>>>>
>>>>> However, after reading the doc
>>>>> (http://camel.apache.org/aggregator.html),
>>>>> I
>>>>> followed the instructns but my aggregation strategy only returns the
>>>>> last
>>>>> exchange, even though I specifically configured it to send messages
>>>>> only
>>>>> when the outbatchsize is 2.
>>>>>
>>>>> I implemented a custom aggregationstrategy with shoulld combine my
>>>>> exchanges
>>>>> into one. I log the event in the class and it works fine, what is
>>>>> beyond
>>>>> me
>>>>> is why it returns only the last exchange.
>>>>>
>>>>>
>>>>> See my config here:
>>>>> <bean id="myAggregatorStrategy"
>>>>> class="org.tempuri.MyAggregationStrategy"/>
>>>>>
>>>>> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>> <route>
>>>>> <from uri="direct:RequestProcessor" />
>>>>> <to uri="xslt:requestToSOAP.xsl"/>
>>>>> <wireTap uri="direct:AggregatorServices"/>
>>>>> <to uri="xslt:requestToManager.xsl"/>
>>>>> <convertBodyTo type="javax.xml.transform.dom.DOMSource" />
>>>>> <to uri="nmr:{http://services.locator/}Service:ServicesPort"/>
>>>>> <to uri="direct:AggregatorServices"/>
>>>>> </route>
>>>>>
>>>>> <route>
>>>>> <from uri="direct:AggregatorServices" />
>>>>> <aggregate strategyRef="myAggregatorStrategy" outBatchSize="2">
>>>>> <correlationExpression>
>>>>> <constant>true</constant>
>>>>> </correlationExpression>
>>>>> <to uri="direct:ProcessorServices"/>
>>>>> </aggregate>
>>>>> </route>
>>>>>
>>>>> <route>
>>>>> <from uri="direct:ProcessorServices" />
>>>>> <to uri="log:Response"/>
>>>>> </route>
>>>>> </osgi:camelContext>
>>>>>
>>>>> log:Response only print out response from <to
>>>>> uri="nmr:{http://services.locator/}Service:ServicesPort"/>.
>>>>>
>>>>> Meanwhile, the log inside myStratRef (myAggregatorStrategy), which I
>>>>> ask
>>>>> to
>>>>> concatenate the old & new exchanges shows both exchanges were
>>>>> concatenated.
>>>>> How do I get this concatenated exchange to be sent (to log:Resposne)?
>>>>>
>>>>> Regards.
>>>>> --
>>>>> View this message in context:
>>>>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27270355.html
>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27273231.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27275141.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
Re: Aggregator's not returning combined exchanges, only returns
last exchange
Posted by lekkie <le...@gmail.com>.
This is what comes form my log:
11:38:31,370 | INFO | 0: Batch Sender | MyAggregationStrategy |
rg.tempuri.MyAggregationStrategy 23 | new: Exchange[Message:
StringSource[<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><_ns_:RequestResponse
xmlns:_ns_="http://services.locator/"><return
xmlns:tns="http://services.locator/"><code>-1</code><message>Unknown
error</message></return></_ns_:RequestResponse></soap:Body></soap:Envelope>]]
11:38:31,370 | INFO | 0: Batch Sender | MyAggregationStrategy |
rg.tempuri.MyAggregationStrategy 30 | newly formed: Exchange[Message:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<kxml>
<request>
<amountText>230</amountText>
<sellAccSelBox>current</sellAccSelBox>
</request>
</kxml>
</soap:Body>
</soap:Envelope>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><_ns_:RequestResponse
xmlns:_ns_="http://services.locator/"><return
xmlns:tns="http://services.locator/" ><code>-1</code><message>Unknown
error</message>xmlns:xsi="... [Body clipped after 1000 chars, total length
is 1301]]
In the log above, myaggregationstrategy prints the concatenated message, but
the problem is that the printed exchange is not returned to <from
uri="direct:ProcessorServices" />, only the last exchange gets to <from
uri="direct:ProcessorServices" />.
I hope this is clear.
Stan Lewis-3 wrote:
>
> Hmmm, I tested your aggregator code as-is on 2.2-SNAPSHOT here and it
> works fine:
>
> 2010-01-22 09:41:18,444 [0: Batch Sender] INFO
> JoinStringAggregatorTest - New: Exchange[Message: one]
> 2010-01-22 09:41:18,444 [0: Batch Sender] INFO
> JoinStringAggregatorTest - old: Exchange[Message: one]
> 2010-01-22 09:41:18,445 [0: Batch Sender] INFO
> JoinStringAggregatorTest - new: Exchange[Message: two]
> 2010-01-22 09:41:18,445 [0: Batch Sender] INFO
> JoinStringAggregatorTest - newly formed: Exchange[Message:
> onetwo]
> 2010-01-22 09:41:18,800 [0: Batch Sender] INFO AGGREGATION_RESULT
> - Exchange[BodyType:String, Body:onetwo]
>
> What version are you running there, can you try the latest snapshot?
>
> On Fri, Jan 22, 2010 at 8:39 AM, lekkie <le...@gmail.com> wrote:
>>
>> See code below:
>>
>> package org.tempuri;
>>
>> import org.apache.camel.Exchange;
>> import org.apache.camel.Header;
>> import org.apache.camel.Message;
>> import org.apache.camel.processor.aggregate.AggregationStrategy;
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>>
>> public class MyAggregationStrategy implements AggregationStrategy {
>>
>> private static final transient Log LOG =
>> LogFactory.getLog(MyAggregationStrategy.class);
>>
>> public Exchange aggregate(Exchange oldExchange, Exchange
>> newExchange)
>> {
>>
>> if (oldExchange == null)
>> {
>> LOG.info("old is null only new available");
>> LOG.info("New: " + newExchange);
>> return newExchange;
>> }
>>
>> LOG.info("old: " + oldExchange);
>> LOG.info("new: " + newExchange);
>>
>> Message newIn = newExchange.getIn();
>> String oldBody =
>> oldExchange.getIn().getBody(String.class);
>> String newBody = newIn.getBody(String.class);
>> newIn.setBody(oldBody + newBody);
>>
>> LOG.info("newly formed: " + newExchange);
>>
>> return newExchange;
>> }
>>
>>
>> }
>>
>>
>>
>>
>> Stan Lewis-3 wrote:
>>>
>>> Can you post what you're doing in your aggregation strategy?
>>>
>>> On Fri, Jan 22, 2010 at 4:05 AM, lekkie <le...@gmail.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I want to combine messages from 2 different exchanges into a single
>>>> exchange, from the EIP patterns aggregation strategy seems to be right
>>>> pattern to use.
>>>>
>>>> However, after reading the doc
>>>> (http://camel.apache.org/aggregator.html),
>>>> I
>>>> followed the instructns but my aggregation strategy only returns the
>>>> last
>>>> exchange, even though I specifically configured it to send messages
>>>> only
>>>> when the outbatchsize is 2.
>>>>
>>>> I implemented a custom aggregationstrategy with shoulld combine my
>>>> exchanges
>>>> into one. I log the event in the class and it works fine, what is
>>>> beyond
>>>> me
>>>> is why it returns only the last exchange.
>>>>
>>>>
>>>> See my config here:
>>>> <bean id="myAggregatorStrategy"
>>>> class="org.tempuri.MyAggregationStrategy"/>
>>>>
>>>> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>> <route>
>>>> <from uri="direct:RequestProcessor" />
>>>> <to uri="xslt:requestToSOAP.xsl"/>
>>>> <wireTap uri="direct:AggregatorServices"/>
>>>> <to uri="xslt:requestToManager.xsl"/>
>>>> <convertBodyTo type="javax.xml.transform.dom.DOMSource" />
>>>> <to uri="nmr:{http://services.locator/}Service:ServicesPort"/>
>>>> <to uri="direct:AggregatorServices"/>
>>>> </route>
>>>>
>>>> <route>
>>>> <from uri="direct:AggregatorServices" />
>>>> <aggregate strategyRef="myAggregatorStrategy" outBatchSize="2">
>>>> <correlationExpression>
>>>> <constant>true</constant>
>>>> </correlationExpression>
>>>> <to uri="direct:ProcessorServices"/>
>>>> </aggregate>
>>>> </route>
>>>>
>>>> <route>
>>>> <from uri="direct:ProcessorServices" />
>>>> <to uri="log:Response"/>
>>>> </route>
>>>> </osgi:camelContext>
>>>>
>>>> log:Response only print out response from <to
>>>> uri="nmr:{http://services.locator/}Service:ServicesPort"/>.
>>>>
>>>> Meanwhile, the log inside myStratRef (myAggregatorStrategy), which I
>>>> ask
>>>> to
>>>> concatenate the old & new exchanges shows both exchanges were
>>>> concatenated.
>>>> How do I get this concatenated exchange to be sent (to log:Resposne)?
>>>>
>>>> Regards.
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27270355.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27273231.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
>
>
--
View this message in context: http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27275141.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Aggregator's not returning combined exchanges, only returns last
exchange
Posted by Stan Lewis <ga...@gmail.com>.
Hmmm, I tested your aggregator code as-is on 2.2-SNAPSHOT here and it
works fine:
2010-01-22 09:41:18,444 [0: Batch Sender] INFO
JoinStringAggregatorTest - New: Exchange[Message: one]
2010-01-22 09:41:18,444 [0: Batch Sender] INFO
JoinStringAggregatorTest - old: Exchange[Message: one]
2010-01-22 09:41:18,445 [0: Batch Sender] INFO
JoinStringAggregatorTest - new: Exchange[Message: two]
2010-01-22 09:41:18,445 [0: Batch Sender] INFO
JoinStringAggregatorTest - newly formed: Exchange[Message:
onetwo]
2010-01-22 09:41:18,800 [0: Batch Sender] INFO AGGREGATION_RESULT
- Exchange[BodyType:String, Body:onetwo]
What version are you running there, can you try the latest snapshot?
On Fri, Jan 22, 2010 at 8:39 AM, lekkie <le...@gmail.com> wrote:
>
> See code below:
>
> package org.tempuri;
>
> import org.apache.camel.Exchange;
> import org.apache.camel.Header;
> import org.apache.camel.Message;
> import org.apache.camel.processor.aggregate.AggregationStrategy;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> public class MyAggregationStrategy implements AggregationStrategy {
>
> private static final transient Log LOG =
> LogFactory.getLog(MyAggregationStrategy.class);
>
> public Exchange aggregate(Exchange oldExchange, Exchange newExchange)
> {
>
> if (oldExchange == null)
> {
> LOG.info("old is null only new available");
> LOG.info("New: " + newExchange);
> return newExchange;
> }
>
> LOG.info("old: " + oldExchange);
> LOG.info("new: " + newExchange);
>
> Message newIn = newExchange.getIn();
> String oldBody = oldExchange.getIn().getBody(String.class);
> String newBody = newIn.getBody(String.class);
> newIn.setBody(oldBody + newBody);
>
> LOG.info("newly formed: " + newExchange);
>
> return newExchange;
> }
>
>
> }
>
>
>
>
> Stan Lewis-3 wrote:
>>
>> Can you post what you're doing in your aggregation strategy?
>>
>> On Fri, Jan 22, 2010 at 4:05 AM, lekkie <le...@gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> I want to combine messages from 2 different exchanges into a single
>>> exchange, from the EIP patterns aggregation strategy seems to be right
>>> pattern to use.
>>>
>>> However, after reading the doc (http://camel.apache.org/aggregator.html),
>>> I
>>> followed the instructns but my aggregation strategy only returns the last
>>> exchange, even though I specifically configured it to send messages only
>>> when the outbatchsize is 2.
>>>
>>> I implemented a custom aggregationstrategy with shoulld combine my
>>> exchanges
>>> into one. I log the event in the class and it works fine, what is beyond
>>> me
>>> is why it returns only the last exchange.
>>>
>>>
>>> See my config here:
>>> <bean id="myAggregatorStrategy"
>>> class="org.tempuri.MyAggregationStrategy"/>
>>>
>>> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>> <route>
>>> <from uri="direct:RequestProcessor" />
>>> <to uri="xslt:requestToSOAP.xsl"/>
>>> <wireTap uri="direct:AggregatorServices"/>
>>> <to uri="xslt:requestToManager.xsl"/>
>>> <convertBodyTo type="javax.xml.transform.dom.DOMSource" />
>>> <to uri="nmr:{http://services.locator/}Service:ServicesPort"/>
>>> <to uri="direct:AggregatorServices"/>
>>> </route>
>>>
>>> <route>
>>> <from uri="direct:AggregatorServices" />
>>> <aggregate strategyRef="myAggregatorStrategy" outBatchSize="2">
>>> <correlationExpression>
>>> <constant>true</constant>
>>> </correlationExpression>
>>> <to uri="direct:ProcessorServices"/>
>>> </aggregate>
>>> </route>
>>>
>>> <route>
>>> <from uri="direct:ProcessorServices" />
>>> <to uri="log:Response"/>
>>> </route>
>>> </osgi:camelContext>
>>>
>>> log:Response only print out response from <to
>>> uri="nmr:{http://services.locator/}Service:ServicesPort"/>.
>>>
>>> Meanwhile, the log inside myStratRef (myAggregatorStrategy), which I ask
>>> to
>>> concatenate the old & new exchanges shows both exchanges were
>>> concatenated.
>>> How do I get this concatenated exchange to be sent (to log:Resposne)?
>>>
>>> Regards.
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27270355.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27273231.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
Re: Aggregator's not returning combined exchanges, only returns
last exchange
Posted by lekkie <le...@gmail.com>.
See code below:
package org.tempuri;
import org.apache.camel.Exchange;
import org.apache.camel.Header;
import org.apache.camel.Message;
import org.apache.camel.processor.aggregate.AggregationStrategy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class MyAggregationStrategy implements AggregationStrategy {
private static final transient Log LOG =
LogFactory.getLog(MyAggregationStrategy.class);
public Exchange aggregate(Exchange oldExchange, Exchange newExchange)
{
if (oldExchange == null)
{
LOG.info("old is null only new available");
LOG.info("New: " + newExchange);
return newExchange;
}
LOG.info("old: " + oldExchange);
LOG.info("new: " + newExchange);
Message newIn = newExchange.getIn();
String oldBody = oldExchange.getIn().getBody(String.class);
String newBody = newIn.getBody(String.class);
newIn.setBody(oldBody + newBody);
LOG.info("newly formed: " + newExchange);
return newExchange;
}
}
Stan Lewis-3 wrote:
>
> Can you post what you're doing in your aggregation strategy?
>
> On Fri, Jan 22, 2010 at 4:05 AM, lekkie <le...@gmail.com> wrote:
>>
>> Hi,
>>
>> I want to combine messages from 2 different exchanges into a single
>> exchange, from the EIP patterns aggregation strategy seems to be right
>> pattern to use.
>>
>> However, after reading the doc (http://camel.apache.org/aggregator.html),
>> I
>> followed the instructns but my aggregation strategy only returns the last
>> exchange, even though I specifically configured it to send messages only
>> when the outbatchsize is 2.
>>
>> I implemented a custom aggregationstrategy with shoulld combine my
>> exchanges
>> into one. I log the event in the class and it works fine, what is beyond
>> me
>> is why it returns only the last exchange.
>>
>>
>> See my config here:
>> <bean id="myAggregatorStrategy"
>> class="org.tempuri.MyAggregationStrategy"/>
>>
>> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>> <route>
>> <from uri="direct:RequestProcessor" />
>> <to uri="xslt:requestToSOAP.xsl"/>
>> <wireTap uri="direct:AggregatorServices"/>
>> <to uri="xslt:requestToManager.xsl"/>
>> <convertBodyTo type="javax.xml.transform.dom.DOMSource" />
>> <to uri="nmr:{http://services.locator/}Service:ServicesPort"/>
>> <to uri="direct:AggregatorServices"/>
>> </route>
>>
>> <route>
>> <from uri="direct:AggregatorServices" />
>> <aggregate strategyRef="myAggregatorStrategy" outBatchSize="2">
>> <correlationExpression>
>> <constant>true</constant>
>> </correlationExpression>
>> <to uri="direct:ProcessorServices"/>
>> </aggregate>
>> </route>
>>
>> <route>
>> <from uri="direct:ProcessorServices" />
>> <to uri="log:Response"/>
>> </route>
>> </osgi:camelContext>
>>
>> log:Response only print out response from <to
>> uri="nmr:{http://services.locator/}Service:ServicesPort"/>.
>>
>> Meanwhile, the log inside myStratRef (myAggregatorStrategy), which I ask
>> to
>> concatenate the old & new exchanges shows both exchanges were
>> concatenated.
>> How do I get this concatenated exchange to be sent (to log:Resposne)?
>>
>> Regards.
>> --
>> View this message in context:
>> http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27270355.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
>
>
--
View this message in context: http://old.nabble.com/Aggregator%27s-not-returning-combined-exchanges%2C-only-returns-last-exchange-tp27270355p27273231.html
Sent from the Camel - Users mailing list archive at Nabble.com.