【问题标题】:Marshal java classes annotated with JAXB by StAX [duplicate]StAX用JAXB注释的Marshal java类[重复]
【发布时间】:2014-02-24 00:31:11
【问题描述】:

是否可以在不使用 JAXB 本身的情况下通过 StAX 编组 Java 类(使用 JAXB 注释进行注释)?

【问题讨论】:

  • 如果我可以问,你认为你为什么需要这个?
  • StAX 比 JAXB 快得多,这是主要原因

标签: java jaxb marshalling stax


【解决方案1】:

,要使用 JAXB 注释进行编组,您需要 JAXB - 这就是它的作用。 是的,当您使用 Marshaller 序列化 JAXB 对象树时,您可以使用 StAX 作为输出编写器。

它们是两个不同的东西。 StAX 并不比 JAXB 快,它做了一些不同的事情——它需要在 JAXB 生成正确的 XML 事件后创建文本 XML 以告诉 StAX XML 应该是什么样子。

javax.xml.bind.Marshaller 上使用以下方法将您的 JAXB 对象发送到 StAX:

/**
 * Marshal the content tree rooted at <tt>jaxbElement</tt> into a
 * {@link javax.xml.stream.XMLStreamWriter}.
 *
 * @param jaxbElement
 *      The content tree to be marshalled.
 * @param writer
 *      XML will be sent to this writer.
 *
 * [...]
 * @since JAXB 2.0
 */
public void marshal( Object jaxbElement, javax.xml.stream.XMLStreamWriter writer )
    throws JAXBException;

【讨论】:

  • 谢谢,但是有没有办法通过 StAX 自动编组 java 对象(不使用 Cursor API 或 Iterator API)?
  • 不,StAX 在不同的抽象级别上工作。对于 StAX,您的数据模型已经需要根据您在 XML 文件中找到的内容来工作 - 元素、属性、文本节点等。一般而言,Java 对象,除非直接表示 XML,需要使用一些工具进行映射,这不在 StAX API 的范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多