JAXB испортил кодировку в потоке Mule

Я запускаю поток в Mule CE и у меня огромные проблемы с кодировками. Независимо от того, что я делаю, мои файлы заканчиваются испорченными неанглийскими символами.

До преобразования jaxb-object-to-xml моя полезная нагрузка выглядела хорошо в консоли и в отладчике, но после этого все испортилось.

    ......   
    <http:request>
    <object-to-byte-array-transformer encoding="UTF-8" doc:name="Object to Byte Array"/>
    <object-to-string-transformer doc:name="String" encoding="UTF-8"/> 
    <json:json-to-object-transformer returnClass="java.util.List"  doc:name="JSON2ObjectList" encoding="UTF-8"/>
    <collection-splitter doc:name="Collection Splitter"/>
    <choice doc:name="Choice">
       <when expression="....">
        <custom-transformer returnClass="se.system.Order.SalesHeader"  class="se.system.Transformer.Map2Order" doc:name="Map2Order" mimeType="application/xml" encoding="UTF-8"/>
        <mulexml:jaxb-object-to-xml-transformer name="orderMarshaller" jaxbContext-ref="JAXB_Context" doc:name="orderMarshaller"  mimeType="text/xml" encoding="UTF-8"/>
    <object-to-string-transformer doc:name="XML2String" encoding="UTF-8"/>
    <set-variable variableName="fileName" value="order-#[function:dateStamp].xml" doc:name="fileName" encoding="UTF-8"/>       
    <file:outbound-endpoint path="${file.ToOrder}" responseTimeout="10000" doc:name="File" outputPattern="#[fileName]" mimeType="text/xml" encoding="UTF-8"/>

После преобразования jaxb неанглийские символы выглядят так:

Deliveryinfo2="å ä ö Å Ä Ö &amp; % è É"/

И редактор 010 утверждает, что это ANSI DOS (с перепутанными символами, хотя не знаю, стоит ли этому доверять). Я что-то пропустил в преобразователе jaxb? или где-то еще? Можно ли заменить его компонентом Java, инициировать мой собственный контекст JAXB, получить маршаллер и обработать его самостоятельно? Никаких намеков больше...

С уважением

РЕДАКТИРОВАТЬ: этот может обрабатывать неанглийские символы

<mulexml:object-to-xml-transformer doc:name="Object to XML" encoding="UTF-8" />

но не типы GregorianCalendar или мой основной список объектов других объектов, так что это не альтернатива


person elwis    schedule 26.10.2016    source источник


Ответы (1)


Похоже, это ошибка, вызванная тем, что преобразователь JAXB не соблюдает заданную кодировку, см. source (строка 64).

Что, однако, довольно странно, так это то, что согласно документация JAXB кодировка по умолчанию должна быть UTF-8.

Кодировка

По умолчанию Marshaller будет использовать кодировку UTF-8 при создании данных XML для java.io.OutputStream или java.io.Writer. Используйте setProperty API, чтобы изменить выходную кодировку, используемую во время этих маршалирующих операций. Ожидается, что клиентские приложения будут предоставлять допустимое имя кодировки символов, как определено в Рекомендации W3C XML 1.0 и поддерживается вашей платформой Java.

Наверное, это должно быть что-то вроде этого

final Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, encoding);
person Simon Karlsson    schedule 27.10.2016