我想将输出流转换为String对象

Top*_*der 46 java jaxb

我想将一个转换OutputStream成一个String对象.我OutputStream在编组JAXB对象后返回了一个对象.

Jus*_*ire 94

不是很熟悉jaxb,从我能够找到你可以转换成字符串使用

public String asString(JAXBContext pContext, 
                        Object pObject)
                            throws 
                                JAXBException {

    java.io.StringWriter sw = new StringWriter();

    Marshaller marshaller = pContext.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    marshaller.marshal(pObject, sw);

    return sw.toString();
}
Run Code Online (Sandbox Code Playgroud)

ws.apache.org

但我不确定一个搅拌物.仍在搜索中.

**编辑

编组非元素

另一个常见的用例是你有一个没有@XmlRootElement的对象.JAXB允许你像这样编组它:

marshaller.marshal(new JAXBElement(
new QName("","rootTag"),Point.class,new Point(...)));

这将元素作为根元素,然后是对象的内容.实际上,您可以将它与具有@XmlRootElement的类一起使用,并且只需重命名根元素名称.

乍一看,第二个Point.class参数可能看起来多余,但实际上有必要确定编组器是否会产生(臭名昭着)@xsi:type.在此示例中,类和实例都是Point,因此您将看不到@xsi:type.但如果它们不同,你会看到它.

这也可以用来编组一个简单的对象,比如String或整数.

marshaller.marshal(new JAXBElement(
new QName("","rootTag"),String.class,"foo bar"));

但不幸的是,它不能用于编组像List或Map这样的对象,因为它们不是作为JAXB世界中的一等公民处理的.

这里找到了


小智 7

    StringWriter sw = new StringWriter();
    com.integra.xml.Integracao integracao = new Integracao();
    integracao.add(...);
try {
    JAXBContext context = JAXBContext.newInstance("com.integra.xml");
    Marshaller marshaller = context.createMarshaller();
    marshaller.marshal(integracao, sw );
    System.out.println(sw.toString());
} catch (JAXBException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)