Jonas Waage created CAMEL-12062: ----------------------------------- Summary: Jaxb component does not communicate charset when explicitly set Key: CAMEL-12062 URL: https://issues.apache.org/jira/browse/CAMEL-12062 Project: Camel Issue Type: Bug Components: camel-jaxb Affects Versions: 2.20.1 Reporter: Jonas Waage Priority: Minor
This test will cause a UnmappableCharacterException, since jaxb does not communicate the encoding of the bytes it outputs causing the file endpoint to assume it is UTF-8. This can be mitigated by adding an explicit reader in the route, but it would be nice if it worked OOTB. {code:java} /** * @version */ public class ExplicitFileEncodingTest extends CamelTestSupport { @Override public void setUp() throws Exception { deleteDirectory("target/charset"); super.setUp(); } @Test public void testISOFileEncoding() throws Exception { PurchaseOrder order = new PurchaseOrder(); //Data containing characters ÆØÅæøå that differ in utf-8 and iso String name = "\u00c6\u00d8\u00C5\u00e6\u00f8\u00e5"; order.setName(name); order.setAmount(123.45); order.setPrice(2.22); MockEndpoint result = getMockEndpoint("mock:file"); result.expectedFileExists("target/charset/output.txt"); template.sendBody("direct:start", order); assertMockEndpointsSatisfied(); JAXBContext jaxbContext = JAXBContext.newInstance("org.apache.camel.example"); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); PurchaseOrder obj = (PurchaseOrder)unmarshaller.unmarshal(new File("target/charset/output.txt")); assertEquals(obj.getName(), name); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { JaxbDataFormat jaxb = new JaxbDataFormat("org.apache.camel.example"); jaxb.setEncoding("iso-8859-1"); from("direct:start") .marshal(jaxb) .to("file:target/charset/?fileName=output.txt&charset=iso-8859-1"); } }; } } {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)