jaxb

  • 什么是JAXB

JAXB (Java Architecture for XML Binding) 的主要功能是根据DTD或者XML Schema将XML Element转化为Java类。将XML文本流转化为Java Object,把XML Processing转化为对类的一些属性的访问。简单的来说,它可以让你轻松解析和验证XML内容而不用去写那些繁琐的XML解析代码。

其主要结构如下:

  • JAXB的组成

JAXB 包含两个部分:

1, 第一部分:JAXB包含一个编译器,它读入DTD或者XML Schema,然后生成相等结构的Java Object Model. 这些生成的object model 比DOM或SAX这些general的API更有针对性,更好的反映了Schema原本的结构。这样,使对XML内容的操作变得更为简单。

2, 第二部分:是操作JAXB时的API,你通过这个API来和生成的代码交互。这个API隐藏了JAXB内部操作的实现代码并且提供了统一的基本操作(如 marshalling ,unmarshalling)。
marshalling : 是将一个Java Object转化成XML text的过程。
unmarshalling : 是将XML text转化成相应的Java Object的过程。

  • JAXB 的基本操作

基本操作,像marshalling和unmarshalling需要schema的邦定。

1. 一个schema定义一个XML的格式,说明了了哪些元素允许在XML Message中出现,和元素之间的关系等等. 如图:是一个简单的XML Schema。

Fig. Partial code of primitives.xsd

2. 邦定一个Schema所做的操作就是生成一些Java类来对应相应的Schema。可以通过下面的命令来执行:

xjc -p test.jaxb primitives.xsd -d work

-p 指定生成的Java class所在的package。

-d 指定生成Java class放置的文件夹.

所以根据上面的命令,生成的文件package为test.jaxb,放在work文件夹下.

  • Unmarshalling

1. 穿件一个JAXBContext 对象. 这个对象提供了JAXB API的入口.

JAXBContext context = JAXBContext.newInstance(“com.ericsson.imps.gateway”);

2. 穿件一个 Unmarshaller 对象. 这个对象操作 unmarshalling 的所有流程, unmarshalling() 函数就包含在这个类中.

Unmarshaller unmarshaller = context.createUnmarshaller();

3. 调用 unmarshal() 方法. 这个方法是真正的 unmarshalling XML 文本的地方.

WVSSPMessage wvSSPMessage = (WVSSPMessage) unmarshaller.unmarshal(new File( ” SubscribeRequest .xml”));

下面的图是部分示例代码:

Fig. Partial code of Unmarshalling the SubscribeRequest.xml

  • Marshalling

1. 创建XML内容树,树代表了你想要生成的XML文本的结构。通过 unmarshalling XML 数据, 你可以创建XML 树。 或正你可以通过 ObjectFactory 来创建它。

2. 首先创建一个 ObjectFactory 类的实例:

ObjectFactory objFactory = new ObjectFactory();

3. 接下来,用ObjectFactory 类中的 create 方法来创建每个在XML树种的对象。比如:

WVSSPMessage wvSSPMessage = (WVSSPMessage) objFactory. createWVSSPMessage();

然后用刚创建的实例中的 set 方法设置一些可变的参数。

4. 创建 JAXBContext 对象, 然后指定适当的 context path — 那个包含所有生成 Java 类的包.

JAXBContext jaxbContext = JAXBContext.newInstance(“com.ericsson.imps.gateway “);

5. 创建一个 Marshaller 对象. 这个对象控制整个 marshalling 的流程. 它包含了 marshalling 方法,使真正的 marshalling 操作的所在。

Marshaller marshaller = jaxbContext.createMarshaller();

6. 调用 marshal 方法. 这个方法做真正 marshalling 操作,将object转化为 Content Tree. 当你调用这个方法的时候,你指定一个对象(这个对象必须包含XML Schema中的根元素)、输出对象。

比如, 下面的代码将将 wvSSPMessage 中内容 marshal 为 XML 文本,并输出到 SubscribeRequest .xml 文件:

marshaller.marshal(wvSSPMessage, new FileOutputStream(SubscribeRequest .xml “));

你可能感兴趣的:(java,数据结构,xml)