Here is an example of some off my route:
from("cxf:bean:hubws?dataFormat=MESSAGE").streamCaching().onException(Exception.class).handled(true)
.setHeader(HubConstants.DURATION.getValue(), constant("Hub
received request"))
.multicast().to("direct:channel1", "direct:channel2",
"direct:channel3")
.aggregationStrategy(new
HubAggregationStrategy()).stopOnException();
from("direct:channel1").onException(Exception.class).handled(true).process(new
LogError()).end()
.setHeader(HubConstants.LOGSTATE.getValue(),
constant(HubConstants.MQSTART.getValue()));
from("direct:channel2").onException(Exception.class).handled(true).
process(new
LogError(HubConstants.CHANNEL2.getValue())).end()
.setHeader(HubConstants.DURATION.getValue(), constant("Hub
sends request"))
.bean(AddDuration.class)
.recipientList()
.method(Util.class, "getEndpoint");
from("direct:channel3").onException(Exception.class).handled(true).process(new
LogError()).end()
.setHeader(HubConstants.DURATION.getValue(), constant("Hub
received response"))
.bean(AddDuration.class)
.setHeader(HubConstants.LOGSTATE.getValue(),
constant(HubConstants.MQSLUT.getValue()));
I use the AggregationStrategy, the mqSlut is not null after channel3.
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) {
// the first time we only have the new exchange so it wins the
first round
return newExchange;
}
Object mqSlut =
newExchange.getIn().getHeader(HubConstants.LOGSTATE.getValue());
if(mqSlut != null) {
//newExchange = oldExchange;
Object body = oldExchange.getIn().getBody();
newExchange.getIn().setBody(body);
}
return newExchange;
}
I allways want the body from channel2 back to the client, thats why:
Object body = oldExchange.getIn().getBody();
newExchange.getIn().setBody(body);
Now my problem, i want to enrich the document in AddDuration class:
public Document enrich(@Headers Map<?, ?> requestHeaders, Document doc,
Exchange exchange) throws HubException {
try {
// append a duration
Element documentElement = doc.getDocumentElement();
NodeList elementsByTagNameNS =
documentElement.getElementsByTagNameNS("*", "technicalAddress");
String prefix = documentElement.getPrefix();
Element durationElement =
doc.createElementNS(HubConstants.CORPORATESERVICE_NAMESPACE.getValue(),"duration");
durationElement.setPrefix(prefix);
elementsByTagNameNS.item(0).appendChild(durationElement);
Duration duration = getDuration(exchange);
Element time =
doc.createElementNS(HubConstants.CORPORATESERVICE_NAMESPACE.getValue(),"time");
time.appendChild(doc.createTextNode(String.valueOf(duration.getTime())));
durationElement.appendChild(time);
Element point =
doc.createElementNS(HubConstants.CORPORATESERVICE_NAMESPACE.getValue(),"point");
point.appendChild(doc.createTextNode(String.valueOf(duration.getPoint())));
durationElement.appendChild(point);
if (logger.isInfoEnabled()) {
LogXmlUtil.printDocument(doc, System.out);
}
} catch (Exception e) {
throw new HubException("119");
}
When i debug thrue the code the document is enriched with a duration in
chanel1, chanel2 and chanel3.
Thats nice, but, when it gets back to the client, i only have the duration
from chanel1 and chanel2.
I figuered out thats becouse off the AggregationStrategy, but i dont want to
solve this.
I still want the reponse back to the client from chanel2, but also with the
duration from chanel3, any good ideas out there ?
--
View this message in context:
http://camel.465427.n5.nabble.com/AggregationStrategy-tp5765514.html
Sent from the Camel - Users mailing list archive at Nabble.com.