While working on an issue related to spring-boot I found out that if a data format is registered in camel registry with the same name as the one camel looks-up with the help of DefaultDataFormatResolver, this object is then re-configured for each data format definition so one definition may override previous configuration with an undefined behavior.
So assume you have an xml route definitions as:
And some code like:
Then this test fails with:
It fails because the object added to the SimpleRegistry is shared among the two csv dataformats so it is configured to have delimiter = ';'
For spring-boot this causes some issues as it registers data formats beans as part of its auto-configuration magic thus if you do not set your own instance of data format, any data format operation like marshal/unmarshal may not work as expected.
- for spring-boot a solution would be to annotate auto configured data format beans with prototype scope.
- a more generic solution would be to make DataFormat Cloneable and clone the bean found in the registry