【发布时间】:2015-02-25 03:05:51
【问题描述】:
我想问一下,在创建和编组 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 节点对象图或编组使用反射等其他技术?
如果创建 DOM 节点,它可能会对 XML 大结构产生巨大影响,因为整个图实际上会在内存中存在两次 - 一个作为 POJO(地址),另一个作为 DOM 节点(元素(“地址”))。
我知道您可以编组到 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 等类,但我不确定在编组(序列化)到文本时是否使用它们。
【问题讨论】:
标签: java xml jaxb marshalling