camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luca Burgazzoli (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CAMEL-10542) DataFormat from registry is used for every dataformat operation (marshal/unmarshal)
Date Mon, 28 Nov 2016 17:08:58 GMT
Luca Burgazzoli created CAMEL-10542:
---------------------------------------

             Summary: DataFormat from registry is used for every dataformat operation (marshal/unmarshal)
                 Key: CAMEL-10542
                 URL: https://issues.apache.org/jira/browse/CAMEL-10542
             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)

Mime
View raw message