Hi all, We are migrating from Camel 2 to Camel 3. I know that the attachment handling has changed here. We were able to adjust most of the code. But now I am somehow stuck. We support a format that is a compound message and we use the splitter to split such a message in single messages using the POJO/Bean approach provided by the splitter. The splitter Bean returns a list of Camel messages. The problem I have now is that those messages can also have attachments. And now due to the new logic those attachments are lost since they are part of the Camel Exchange (and not anymore of the message) which is not preserved by the splitter. I think I found the corresponding code in org.apache.camel.processor.Splitter: public ProcessorExchangePair next() { Object part = iterator.next(); if (part != null) { // create a correlated copy as the new exchange to be routed in the splitter from the copy // and do not share the unit of work Exchange newExchange = processorExchangeFactory.createCorrelatedCopy(copy, false); newExchange.adapt(ExtendedExchange.class).setTransacted(original.isTransacted()); // If the splitter has an aggregation strategy // then the StreamCache created by the child routes must not be // closed by the unit of work of the child route, but by the unit of // work of the parent route or grand parent route or grand grand parent route... (in case of nesting). // Therefore, set the unit of work of the parent route as stream cache unit of work, if not already set. if (newExchange.getProperty(ExchangePropertyKey.STREAM_CACHE_UNIT_OF_WORK) == null) { newExchange.setProperty(ExchangePropertyKey.STREAM_CACHE_UNIT_OF_WORK, original.getUnitOfWork()); } // if we share unit of work, we need to prepare the child exchange if (isShareUnitOfWork()) { prepareSharedUnitOfWork(newExchange, copy); } if (part instanceof Message) { newExchange.setIn((Message) part); } else { Message in = newExchange.getIn(); in.setBody(part); } return createProcessorExchangePair(index++, processor, newExchange, route); } else { return null; } My proposal would be to also add the attachments here to the new Exchange. Alternatively newExchange.setIn() could also set the attachments. Any other solution proposal is of course also welcome.
Regards, Jörg