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:08:58 UTC

[jira] [Created] (CAMEL-10541) DataFormat from registry is used for every dataformat operation (marshal/unmarshal)

Luca Burgazzoli created CAMEL-10541:
---------------------------------------

             Summary: 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)