Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-12062

Jaxb component does not communicate charset when explicitly set

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.20.1
    • 2.21.0
    • camel-jaxb
    • 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");
                  }
              };
          }
      
      }
      

      Attachments

        Activity

          People

            acosentino Andrea Cosentino
            MadMod Jonas Waage
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: