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

Apache CXF/JAXB解组器将日语字符转换为?标记java,java,xml,cxf,Java,Xml,Cxf,apachecxf/JAXB没有对日文字符进行解组。如果我们使用System.out.println打印xml,输出结果如下所示 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <employee id="1470"> <designation>Eng</designation> <name>マデュ</name> <salary&g

apachecxf/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 version="1.0" encoding="UTF-8" standalone="yes"?>
<employee id="1470">
    <designation>Eng</designation>
    <name>???</name>
    <salary>20000.0</salary>
</employee>

英格
マデュ
20000
如果我们将相同的XML传递给CXF层,它将进行如下转换

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

英格
???
20000

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

你能试着在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();

你能试着在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();

在这里,您看到了带有“??”的输出xml?您可以共享转换代码吗?JAXBContext pContext=JAXBContext.newInstance(目标);sw=新的StringWriter();Marshaller=pContext.createMarshaller();setProperty(marshaller.JAXB_编码,“UTF-8”);setProperty(marshaller.JAXB_格式的_输出,Boolean.TRUE);马歇尔勒。马歇尔(西南部pObject);在这里,您看到了带有“??”的输出xml?您可以共享转换代码吗?JAXBContext pContext=JAXBContext.newInstance(目标);sw=新的StringWriter();Marshaller=pContext.createMarshaller();setProperty(marshaller.JAXB_编码,“UTF-8”);setProperty(marshaller.JAXB_格式的_输出,Boolean.TRUE);马歇尔勒。马歇尔(西南部pObject);在添加PrintWriter后获取javax.xml.bind.UnmarshaleException。是否可以在上面尝试将XMLEventWriter添加到System.out?仍然获取相同的异常。这里我关心的是如何封送/解封日本字符。而且将编码设置为utf-8也没有用。你能建议我怎么做吗?在添加PrintWriter后尝试获取javax.xml.bind.UnmarshalException。可以在上面尝试将XMLEventWriter添加到System.out吗?仍然获得相同的异常。这里我关心的是如何封送/解封日本字符。而且将编码设置为utf-8也没有用。你能建议我怎么做吗?试试这个