Details
-
Type:
Bug
-
Status: Resolved
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: 2.20.1
-
Fix Version/s: 2.21.0
-
Component/s: camel-jaxb
-
Labels:None
-
Patch Info:Patch Available
-
Estimated Complexity: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"); } }; } }