[ 
https://issues.apache.org/jira/browse/CAMEL-12415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Dettinger updated CAMEL-12415:
-----------------------------------
    Fix Version/s:     (was: 2.20.4)

> Camel-jaxb option "encoding" with option "filterNonXmlChars" generate wrong 
> data
> --------------------------------------------------------------------------------
>
>                 Key: CAMEL-12415
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12415
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jaxb
>    Affects Versions: 2.21.0
>         Environment: OS X 13.3, Java 8
>            Reporter: Jonas Waage
>            Assignee: Alex Dettinger
>            Priority: Minor
>             Fix For: 2.21.1, 2.22.0
>
>
> When using the jaxb-component to marshal.
> The properties:
>  * Encoding
>  * FilterNonXmlChars
> do not work together correctly.
> FilterNonXmlChars will ignore the set encoding, and make the output bytes 
> UTF-8 encoded.
>  I would either expect this to just work, and by that I mean bytes should be 
> encoded as the set encoding, or minimally fail during startup of the route 
> with an exception explaining that these properties does not work together. 
> I'd really prefer the first, since I want to use the functionality of both.
> I have provided a patch which makes this work.I have done a small refactoring 
> to not have to duplicate more code. I can rewrite this if it is a problem.
> Below is a test which will reproduce the problem.
> {code:java}
> public class ExplicitEncodingAndXMLCharFilteringTest extends CamelTestSupport 
> {
>     @Override
>     public void setUp() throws Exception {
>         deleteDirectory("target/charset");
>         super.setUp();
>     }
>     @Test
>     public void testIsoAndCharacterFiltering() throws Exception {
>         PurchaseOrder order = new PurchaseOrder();
>         //Data containing characters ÆØÅæøå that differ in utf-8 and iso + a 
> spouting whale
>         String name = 
> "\u00c6\u00d8\u00C5\u00e6\u00f8\u00e5\uD83D\uDC33\uFFFD";
>         String expected = "\u00c6\u00d8\u00C5\u00e6\u00f8\u00e5  \uFFFD"; 
> //Spouting whale has become spaces
>         order.setName(name);
>         order.setAmount(123.45);
>         order.setPrice(2.22);
>         MockEndpoint result = getMockEndpoint("mock:file");
>         result.expectedFileExists("target/charset/output.xml");
>         template.sendBody("direct:start", order);
>         assertMockEndpointsSatisfied();
>         JAXBContext jaxbContext = 
> JAXBContext.newInstance("org.apache.camel.example");
>         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
>         InputStream inputStream = new 
> FileInputStream("target/charset/output.xml");
>         Reader reader = new InputStreamReader(inputStream, "ISO-8859-1");
>         PurchaseOrder obj = (PurchaseOrder) unmarshaller.unmarshal(reader);
>         assertEquals(expected, obj.getName());
>     }
>     @Override
>     protected RouteBuilder createRouteBuilder() throws Exception {
>         return new RouteBuilder() {
>             @Override
>             public void configure() throws Exception {
>                 JaxbDataFormat jaxb = new 
> JaxbDataFormat("org.apache.camel.example");
>                 jaxb.setFilterNonXmlChars(true);
>                 jaxb.setEncoding("iso-8859-1");
>                 from("direct:start")
>                         .marshal(jaxb)
>                         
> .to("file:target/charset/?fileName=output.xml&charset=iso-8859-1");
>             }
>         };
>     }
> {code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to