java - Apache CXF/JAXB 解码器将日语字符转换为 ?标记java

标签 java xml cxf

Apache CXF/JAXB 不会解码日语字符。如果我们使用 System.out.println 打印 xml,输出将正常显示,如下所示。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee id="1470">
    <designation>Eng</designation>
    <name>マデュ</name>
    <salary>20000.0</salary>
</employee>

如果我们将相同的 XML 传递到 CXF 层,它的转换如下。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee id="1470">
    <designation>Eng</designation>
    <name>???</name>
    <salary>20000.0</salary>
</employee>

如何解决这个问题。提前致谢。

最佳答案

你能尝试在 StringWriter 之上使用 PrintWriter 吗?

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);

你能尝试使用 XMLEventWriter 到 System.out 吗?

        XMLEventFactory events = XMLEventFactory.newInstance();
        QName bar = new QName("urn:bar", "bar");
        XMLOutputFactory factory = XMLOutputFactory.newInstance();
        factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
        XMLEventWriter writer = factory.createXMLEventWriter(System.out);


        JAXBContext pContext = JAXBContext.newInstance(target); 


        Marshaller marshaller = pContext.createMarshaller(); 
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
        marshaller.marshal(pObject, writer); 

        writer.add(events.createStartDocument());
        writer.setDefaultNamespace("urn:bar");
        writer.add(events.createStartElement(bar, null, null));
        writer.add(events.createEndDocument());
        writer.flush();

关于java - Apache CXF/JAXB 解码器将日语字符转换为 ?标记java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024386/

相关文章:

java - 为什么我仍然收到 NumberFormatException 错误?

xml - 修复损坏的 XML 文件 - 删除多余的小于/大于符号

java - 访问 JAX RS CXF Web 服务时没有这样的方法错误

web-services - cxf-codegen-plugin 不生成代码

java - Hawt.io Web 应用程序 - 用户权限

java - Java中的空指针异常

带有 RemoteViews 的 Android 自定义通知布局

java - 代码生成 - XML 到 Java

tomcat - 可以使用带有 tomcat 的 cxf 来提供 https 服务(没有码头)

Java 垃圾回收和大对象