2016-10-26 4 views
1

Mule CE에서 플로우를 실행 중이며 인코딩에 큰 문제가 있습니다. 아무리해도 내 파일은 영어가 아닌 문자를 엉망으로 만든다.JAXB는 Mule 흐름에서 인코딩을 엉망으로 만듭니다.

jaxb-object-to-xml 변 환기가 오기전에 콘솔과 디버거에서 페이로드가 잘 보이지만 이후에는 엉망입니다. 그 중 하나가 신뢰할 수있는 경우

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

그리고 010 에디터가 엉망 문자의 ANSI DOS를 (주장 모르는 다음 JAXB 변압기 영어 이외의 문자 후

...... 
    <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 변압기에서 뭔가를 놓친 적이 있습니까? 또는 다른 곳? Java 구성 요소로 바꾸고, 고유 한 JAXB 컨텍스트를 시작하고, 마샬 러를 가져 와서 직접 처리 할 수 ​​있습니까? 어떤 단서 없습니다 더 이상 ...

감사

편집 : 그것은 대체하지 그래서이 사람은 영어 이외의 문자

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

하지만 GregorianCalendar를 유형 또는 다른 개체의 내 주요 개체 목록을 처리 할 수 ​​있습니다

답변

1

이것은 주어진 인코딩을 따르지 않는 JAXB 변환기로 인해 발생하는 버그 인 것으로 보입니다. source (64 번째 줄)을 참조하십시오.

그러나 이상한 점은 JAXB documentation에 따르면 기본 인코딩은 UTF-8이어야한다는 것입니다. java.io.OutputStream에 또는 java.io.Writer에 XML 데이터를 생성 할 때

인코딩

기본적으로하는 Marshaller은 UTF-8 인코딩을 사용한다. 이러한 정렬 화 조작 중에 사용되는 출력 인코딩을 변경하려면 setProperty API를 사용하십시오. 클라이언트 응용 프로그램은 W3C XML 1.0 권장 사항에 정의되어 있고 Java Platform에서 지원하는 유효한 문자 인코딩 이름을 제공해야합니다.

이것은 아마도이

final Marshaller m = jaxbContext.createMarshaller(); 
m.setProperty(Marshaller.JAXB_ENCODING, encoding); 
과 같이해야한다
관련 문제