从编组对象

时间:2015-09-15 16:46:16

标签: java xml dom jaxb

我想从我的编组对象构建一个org.w3c.dom.Document

我已经尝试了topic中描述的内容但是徒劳无功。

这是我的代码:

public Document serialise() throws Exception {
    MyClass myObjectToMarshall = this.getObjectToMarshall();
    JAXBContext jc = JAXBContext.newInstance(MyClass.class);
    Marshaller m = jc.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    m.marshal(myObjectToMarshall , System.out);
    StringWriter xml = new StringWriter();
    m.marshal(myObjectToMarshall , xml);
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    return builder.parse(new InputSource(new StringReader(xml.toString())));
}

执行此指令m.marshal(myObjectToMarshall , System.out);时,我得到以下结果:

<myObjectToMarshall >
    <id>15</id>
    <code>MY_CODE</code>
    <label>MY_LABEL</label>
    <date>2015-09-15+02:00</date>
</myObjectToMarshall >

我想myObjectToMarshall的编组工作已经正确完成。

但是,当我使用IntelliJ builder.parse(new InputSource(new StringReader(xml.toString())))调试最后一条指令时,我得到一个空文档:[#document: null]

是否还要设置其他属性?

请你能帮我解释为什么文件是空的吗?

提前谢谢。

P.S。我使用java 7。

1 个答案:

答案 0 :(得分:0)

你的文件很好。

实施toString()方法以返回"["+getNodeName()+": "+getNodeValue()+"]"。文档的nodeName#document,文档的nodeValuenull。请参阅Node的javadoc。

如果您需要DOM文档,请不要编组到String,然后解析文本。只是直接编组到DOM树中:

public Document serialise() throws Exception {
    MyClass myObjectToMarshall = this.getObjectToMarshall();
    JAXBContext jc = JAXBContext.newInstance(MyClass.class);
    DOMResult domResult = new DOMResult();
    jc.createMarshaller().marshal(myObjectToMarshall, domResult);
    return (Document)domResult.getNode();
}