Hello and thank you for your reply.
This is the code for aggregating the whole camel message:
class ObjectsAggregationStrategy implements AggregationStrategy {
final Logger logger =
Logger.getLogger(ObjectsAggregationStrategy.class);
@SuppressWarnings("unchecked")
@Override
public Exchange aggregate(Exchange oldExchange, Exchange
newExchange) {
List<Message> items;
if (oldExchange == null) {
items = new ArrayList<Message>();
items.add(newExchange.getIn());
Exchange copyExchange = newExchange.copy();
copyExchange.getIn().setBody(items);
return copyExchange;
}
items = oldExchange.getIn().getBody(List.class);
Message newItem = newExchange.getIn();
items.add(newItem);
oldExchange.getIn().setBody(items);
Exchange finalExchange = updateInMessageHeaders(oldExchange,
newExchange);
finalExchange = updateExchangeProperties(oldExchange,
newExchange);
return finalExchange;
}
private Exchange updateExchangeProperties(Exchange oldExchange,
Exchange newExchange) {
CaseInsensitiveMap properties = new
CaseInsensitiveMap(newExchange.getProperties());
for (Entry<String, Object> entry : properties.entrySet()) {
oldExchange.setProperty(entry.getKey(), entry.getValue());
}
return oldExchange;
}
private Exchange updateInMessageHeaders(Exchange oldExchange,
Exchange newExchange) {
CaseInsensitiveMap headers = new
CaseInsensitiveMap(newExchange.getIn().getHeaders());
for (Entry<String, Object> entry : headers.entrySet()) {
if
(entry.getKey().equals(MessageConstant.ERES_FILE_COMPLETE) &&
entry.getValue().equals(Boolean.TRUE)) {
logger.debug("Received and set the ERES_FILE_COMPLETE
header from routeId["
+ oldExchange.getFromRouteId() + "].");
}
oldExchange.getIn().setHeader(entry.getKey(),
entry.getValue());
}
return oldExchange;
}
}
And this is the code for aggregating a serializable custom bean:
public class MessageAggregationStrategy<T> implements AggregationStrategy {
final Logger logger =
Logger.getLogger(MessageAggregationStrategy.class);
@SuppressWarnings("unchecked")
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
MessageBean<T> bean = setExchangeData(newExchange);
List<MessageBean<T>> items;
if (oldExchange == null) {
items = new ArrayList<MessageBean<T>>();
items.add(bean);
Exchange copyExchange = newExchange.copy();
copyExchange.getIn().setBody(items);
return copyExchange;
}
items = oldExchange.getIn().getBody(List.class);
items.add(bean);
oldExchange.getIn().setBody(items);
return oldExchange;
}
@SuppressWarnings("unchecked")
private MessageBean<T> setExchangeData(Exchange exchange) {
MessageBean<T> bean = new MessageBean<T>();
bean.setBody((T) exchange.getIn().getBody());
bean.setHeaders(new
CaseInsensitiveMap(exchange.getIn().getHeaders()));
bean.setProperties(new
CaseInsensitiveMap(exchange.getProperties()));
return bean;
}
where MessageBean is:
public class MessageBean<T> implements Serializable {
private static final long serialVersionUID = -987592973477513095L;
private T body;
private CaseInsensitiveMap properties;
private CaseInsensitiveMap headers;
public T getBody() {
return body;
}
public CaseInsensitiveMap getProperties() {
return properties;
}
public CaseInsensitiveMap getHeaders() {
return headers;
}
public void setBody(T body) {
this.body = body;
}
public void setProperties(CaseInsensitiveMap properties) {
this.properties = properties;
}
public void setHeaders(CaseInsensitiveMap headers) {
this.headers = headers;
}
}
--
View this message in context:
http://camel.465427.n5.nabble.com/Exceptions-when-aggregating-messages-tp5735523p5735560.html
Sent from the Camel - Users mailing list archive at Nabble.com.