Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
2.20.1
-
None
-
Patch Available
-
Unknown
Description
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.
/** * @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"); } }; } }