[ 
https://issues.apache.org/jira/browse/CAMEL-12415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16420817#comment-16420817
 ] 

ASF GitHub Bot commented on CAMEL-12415:
----------------------------------------

aldettinger commented on a change in pull request #2277: CAMEL-12415 - 
camel-jaxb, fix options combination: encoding,filterNon…
URL: https://github.com/apache/camel/pull/2277#discussion_r178341934
 
 

 ##########
 File path: 
components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitEncodingAndXMLCharFilteringTest.java
 ##########
 @@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.example;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.jaxb.JaxbDataFormat;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+
+/**
+ * @version 
+ */
+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");
+
 
 Review comment:
   And indeed the resulting file does not contain the spouting whale anymore 
with your fix. Seems that it was UTF-8 encoded before. Good catch :+1:.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> 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
>            Priority: Minor
>
> 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