【问题标题】:Relation of JAXB marshaling and DOM NodesJAXB 编组和 DOM 节点的关系
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 拜托,你能补充一些东西来支持你的说法吗?他们用什么代替?内省?链接到资源,尤其是 RI,将不胜感激。使用源代码很棘手,com.sun.xml.* 包是 rt.jar 的一部分,但包含在普遍可用的源代码中。遗憾的是不能只运行和调试它们,这就是我在这里问人们的原因。
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2020-07-27
    相关资源
    最近更新 更多