method is not thread safe because the processor is passed as a lambda to the executor service:
and therefore if the caller use the original Exchange reference in the Processor, for example
the executorService thread will use a dirty Exchange body in cases where the original executor thread runs faster.
On the other hand this method is thread safe because the new Exchange object can be populated from the original exchange:
I think the solution would be processing the request with the passed processor then submit the job to the executor service or clearly mention this in the API doc. This behavior is currently not straightforward.
Of course you can pass references with the 2. method also which will become dirty but I think the clear intention here is sending a clean Exchange asynchronously to an endpoint with either a Processor or an exact Exchange object.