第 39 章 使用 A JAXBContext 对象

摘要

JAXBContext 对象允许 Apache CXF 的运行时转换 XML 元素和 Java 对象之间的数据。应用程序开发人员需要在消息处理程序中实例化 JAXBContext 对象,并在实施使用原始 XML 消息的使用者时使用 JAXB 对象。

概述

JAXBContext 对象是由运行时使用的低级对象。它允许运行时在 XML 元素及其对应的 Java 表示之间转换。应用程序开发人员通常不需要使用 JAXBContext 对象。XML 数据的 marshaing 和 unmarshaling 通常由 JAX-WS 应用的传输和绑定层处理。

但是,当应用程序需要直接操作 XML 消息内容时,会有一些实例。在这两个实例中:

您将需要使用两个可用的 JAXBContext.newInstance() 方法之一来实例化 JAXBContext 对象。

最佳实践

JAXBContext 对象是非常强化的资源,可以实例化。建议应用程序尽可能多地创建几个实例。执行此操作的一种方法是创建一个 JAXBContext 对象,该对象可以管理您的应用使用的所有 JAXB 对象,并在应用的许多部分中共享它。

JAXBContext 对象是安全线程。

使用对象工厂获取 JAXBContext 对象

JAXBContext 类提供了一个 newInstance() 方法,显示在 例 39.1 “使用类获取 JAXB 上下文” 中,它取一个实施 JAXB 对象的类列表。

例 39.1. 使用类获取 JAXB 上下文

staticJAXBContextnewInstanceClass…​classesToBeBoundJAXBException

返回的 JAXBObject 对象将能够对通过传入方法的类实施的 JAXB 对象进行 marshal 和 unmarshal 数据。它还能够使用通过传入方法的任何类静态引用的任何类。

虽然可以将应用使用的每个 JAXB 类的名称传递给 newInstance() 方法,但它效率不高。实现相同目标的更有效的方法是在您的应用程序生成的对象工厂或对象因素。生成的 JAXBContext 对象可以管理指定对象工厂可以实例化的任何 JAXB 类。

使用软件包名称获取 JAXBContext 对象

JAXBContext 类提供了一个 newInstance() 方法,显示在 例 39.2 “使用类获取 JAXB 上下文” 中,它使用冒号(:)顺序排列软件包名称的列表。指定的软件包应包含来自 XML 架构的 JAXB 对象。

例 39.2. 使用类获取 JAXB 上下文

staticJAXBContextnewInstanceStringcontextPathJAXBException

返回的 JAXBContext 对象将能够为指定软件包中的类实施的所有 JAXB 对象进行 marshal 和 unmarshal 数据。