JAXB (Java Architecture for XML Binding) 的主要功能是根据DTD或者XML Schema将XML Element转化为Java类。将XML文本流转化为Java Object,把XML Processing转化为对类的一些属性的访问。简单的来说,它可以让你轻松解析和验证XML内容而不用去写那些繁琐的XML解析代码。
其主要结构如下:
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的过程。
基本操作,像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文件夹下.
1. 穿件一个JAXBContext 对象. 这个对象提供了JAXB API的入口.
2. 穿件一个 Unmarshaller 对象. 这个对象操作 unmarshalling 的所有流程, unmarshalling() 函数就包含在这个类中.
3. 调用 unmarshal() 方法. 这个方法是真正的 unmarshalling XML 文本的地方.
下面的图是部分示例代码:
Fig. Partial code of Unmarshalling the SubscribeRequest.xml
1. 创建XML内容树,树代表了你想要生成的XML文本的结构。通过 unmarshalling XML 数据, 你可以创建XML 树。 或正你可以通过 ObjectFactory 来创建它。
2. 首先创建一个 ObjectFactory 类的实例:
3. 接下来,用ObjectFactory 类中的 create 方法来创建每个在XML树种的对象。比如:
然后用刚创建的实例中的 set 方法设置一些可变的参数。
4. 创建 JAXBContext 对象, 然后指定适当的 context path — 那个包含所有生成 Java 类的包.
5. 创建一个 Marshaller 对象. 这个对象控制整个 marshalling 的流程. 它包含了 marshalling 方法,使真正的 marshalling 操作的所在。
6. 调用 marshal 方法. 这个方法做真正 marshalling 操作,将object转化为 Content Tree. 当你调用这个方法的时候,你指定一个对象(这个对象必须包含XML Schema中的根元素)、输出对象。
比如, 下面的代码将将 wvSSPMessage 中内容 marshal 为 XML 文本,并输出到 SubscribeRequest .xml 文件: