JAXB 搞乱了 Mule 流中的编码
JAXB messing up encoding in Mule flow
我是 运行 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 transformer 后非英文字符看起来像:
Deliveryinfo2="å ä ö Å Ä Ö & % è É"/
而且 010 编辑器声称它是 ANSI DOS(字符乱七八糟,虽然不知道那个是否可信)
我错过了 jaxb 变压器中的某些东西吗?或者别的地方?
是否可以用 Java 组件替换它,启动我自己的 JAXB 上下文,获得一个编组器并自己处理它?
没有线索了...
此致
编辑:这个可以处理非英文字符
<mulexml:object-to-xml-transformer doc:name="Object to XML" encoding="UTF-8" />
但不是 GregorianCalendar 类型或我的其他对象的主要对象列表,因此它不是替代方案
这似乎是 JAXB 转换器不遵守给定编码导致的错误,请参阅 source(第 64 行)。
但是有点奇怪的是,根据 JAXB documentation 默认编码应该是 UTF-8。
Encoding
By default, the Marshaller will use UTF-8 encoding when generating XML data to a java.io.OutputStream, or a java.io.Writer. Use the setProperty API to change the output encoding used during these marshal operations. Client applications are expected to supply a valid character encoding name as defined in the W3C XML 1.0 Recommendation and supported by your Java Platform.
大概应该是这样的
final Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, encoding);
我是 运行 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 transformer 后非英文字符看起来像:
Deliveryinfo2="å ä ö Å Ä Ö & % è É"/
而且 010 编辑器声称它是 ANSI DOS(字符乱七八糟,虽然不知道那个是否可信) 我错过了 jaxb 变压器中的某些东西吗?或者别的地方? 是否可以用 Java 组件替换它,启动我自己的 JAXB 上下文,获得一个编组器并自己处理它? 没有线索了...
此致
编辑:这个可以处理非英文字符
<mulexml:object-to-xml-transformer doc:name="Object to XML" encoding="UTF-8" />
但不是 GregorianCalendar 类型或我的其他对象的主要对象列表,因此它不是替代方案
这似乎是 JAXB 转换器不遵守给定编码导致的错误,请参阅 source(第 64 行)。
但是有点奇怪的是,根据 JAXB documentation 默认编码应该是 UTF-8。
Encoding
By default, the Marshaller will use UTF-8 encoding when generating XML data to a java.io.OutputStream, or a java.io.Writer. Use the setProperty API to change the output encoding used during these marshal operations. Client applications are expected to supply a valid character encoding name as defined in the W3C XML 1.0 Recommendation and supported by your Java Platform.
大概应该是这样的
final Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, encoding);