You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Luca Burgazzoli (JIRA)" <ji...@apache.org> on 2016/11/28 17:11:58 UTC
[jira] [Closed] (CAMEL-10541) DataFormat from registry is used for
every dataformat operation (marshal/unmarshal)
[ https://issues.apache.org/jira/browse/CAMEL-10541?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Luca Burgazzoli closed CAMEL-10541.
-----------------------------------
Resolution: Duplicate
> DataFormat from registry is used for every dataformat operation (marshal/unmarshal)
> -----------------------------------------------------------------------------------
>
> Key: CAMEL-10541
> URL: https://issues.apache.org/jira/browse/CAMEL-10541
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Luca Burgazzoli
>
> 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:
> {code:xml}
> <routes xmlns="http://camel.apache.org/schema/spring">
> <route>
> <from uri="direct:unmarshal"/>
> <unmarshal>
> <csv delimiter=";" headerDisabled="true"/>
> </unmarshal>
> </route>
> <route>
> <from uri="direct:marshal"/>
> <marshal>
> <csv headerDisabled="true" quoteDisabled="true"/>
> </marshal>
> </route>
> </routes>
> {code}
> And some code like:
> {code:java}
> InputStream is = getClass().getResourceAsStream("...");
> SimpleRegistry reg = new SimpleRegistry();
> reg.put("csv-dataformat", new CsvDataFormat());
> DefaultCamelContext ctx = new DefaultCamelContext(reg);
> ctx.addRouteDefinitions(ctx.loadRoutesDefinition(is).getRoutes());
> ctx.start();
> ProducerTemplate template = ctx.createProducerTemplate();
> String result = template.requestBody(
> "direct:marshal",
> Arrays.asList(Arrays.asList( "A1", "B1", "C1" )),
> String.class);
> assertEquals("A1,B1,C1", result);
> ctx.stop
> {code}
> Then this test fails with:
> {code}
> Expected :A1,B1,C1
> Actual :A1;B1;C1
> {code}
> It fails because the object added to the SimpleRegistry is shared among the two csv dataformats so it is configured to have delimiter = ';'
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)