第 39 章 使用 A JAXBContext 对象

摘要

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

概述

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

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

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

最佳实践

JAXBContext 对象是资源密集型,用于实例化。建议应用程序尽可能创建几个实例。执行此操作的一种方法是创建一个 JAXBContext 对象,它可以管理应用所使用的所有 JAXB 对象,并尽可能在应用的许多部分之间共享。

JAXBContext 对象是线程安全。

使用对象工厂获取 JAXBContext 对象

JAXBContext提供新的Instance () 方法,如 例 39.1 “使用类获取 JAXB 上下文” 所示,取实施 JAXB 对象的类列表。

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

静态JAXBContextnewInstanceClass…​classesToBeBoundJAXBException

返回的 JAXBObject 对象将能够为传递到方法的类实施的 JAXB 对象进行 marshal 和 unmarshal 数据。它还能够处理从传递给方法的任何类静态引用的任何类。

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

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

JAXBContext 类提供 一个新的Instance () 方法,它在 例 39.2 “使用类获取 JAXB 上下文” 中显示,它采用冒号(:)软件包名称列表。指定的软件包应包含从 XML Schema 派生的 JAXB 对象。

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

staticJAXBContextnewInstanceStringcontextPathJAXBException

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