第 39 章 使用 A JAXBContext 对象
摘要
JAXBContext
对象允许 Apache CXF 运行时在 XML 元素和 Java 对象之间转换数据。应用程序开发人员需要在消息处理程序中实例化 JAXBContext
对象,并在实施使用原始 XML 消息的用户时实例化。
概述
JAXBContext
对象是运行时使用的低级别对象。它允许运行时在 XML 元素及其相应的 Java 表示法之间进行转换。应用程序开发人员通常不需要使用 JAXBContext
对象。XML 数据的 marshaling 和 unmarshaling 通常由 JAX-WS 应用的传输和绑定层处理。
但是,有些情况下应用程序需要直接操作 XML 消息内容。在这两个实例中:
您将需要使用两个可用的
方法之一来实例化 JAXBContext 对象。
JAXBContext
.newInstance ()
最佳实践
JAXBContext
对象是资源密集型,可以实例化。建议应用尽可能创建几个实例。其中一种实现方式是创建一个 JAXBContext
对象,它可以管理应用使用的所有 JAXB 对象,并尽可能在应用的多个部分之间共享。
JAXBContext
对象是线程安全。
使用对象工厂获取 JAXBContext 对象
JAXBContext
类提供了 newInstance ()
方法,如 例 39.1 “使用类获取 JAXB 上下文” 中所示,它取实施 JAXB 对象的类列表。
例 39.1. 使用类获取 JAXB 上下文
staticJAXBContext
newInstance
Class…
classesToBeBound
JAXBException
返回的 JAXBObject
对象将能够对通过传递给方法的类实施的 JAXB 对象进行 marshal 和 unmarshal 数据。它还能够处理从传递给方法中的任何类静态引用的任何类。
虽然可以将应用使用的每个 JAXB 类的名称传递给 newInstance ()
方法,但效率不高。完成相同目标的更有效的方法是传递为您的应用程序生成的对象工厂或对象工厂。生成的 JAXBContext
对象将能够管理指定对象工厂可以实例化的任何 JAXB 类。
使用软件包名称获取 JAXBContext 对象
JAXBContext
类 提供了一个新的Instance ()
方法,如 例 39.2 “使用类获取 JAXB 上下文” 中所示,它采用冒号(:
)分隔的软件包名称列表。指定的软件包应包含从 XML Schema 派生的 JAXB 对象。
例 39.2. 使用类获取 JAXB 上下文
staticJAXBContext
newInstance
String
contextPath
JAXBException
返回的 JAXBContext
对象能够对指定软件包中的类实施的所有 JAXB 对象进行 marshal 和 unmarshal 数据。