JAXB编组和DOM节点的关系

时间:2015-02-25 03:05:52

标签: java xml jaxb marshalling

我想问一下,在创建和封送JAXB POJO模型时是否创建了任何DOM节点?

示例:

USAddress address = po.getBillTo();
address.setName( "John Bob" );
address.setStreet( "242 Main Street" );
address.setCity( "Beverly Hills" );
...
JAXBContext jc = JAXBContext.newInstance(...);
Marshaller m = jc.createMarshaller();
m.marshal( address, System.out );

上面的JAXB处理是否随时创建了任何“底层”DOM Node对象图或编组使用其他技术如反射?

如果创建DOM节点,它将对XML大结构产生巨大影响,因为整个图形实际上会存在于内存中两次 - 一个作为POJO(地址),一个作为DOM节点(元素(“地址”))。 / p>

我知道您可以编组到DOM节点中:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
m.marshal( element, doc );

但这并不能证明基础DOM节点也是为编组文本而创建的。

注意: JAXB Marshaller,各自MarshallerImpl内部使用XMLSerializer,它使用DOMHandler和javax.xml.transform.Transformer等类,但我不确定它们是否在编组(序列化)文本时使用它们。

1 个答案:

答案 0 :(得分:0)

JAXB参考实现和EclipseLink JAXB(MOXy)在编组到非DOM目标时都不会构建DOM节点。