本文是对Sun网站的文章Java Architecture for XML Binding (JAXB)的翻译的第一部分,主要介绍了如何使用JAXB绑定schema并unmarshal XML文档,转载请声明!
1. 什么是JAXB?
XML和Java技术就象是天生的搭档一样,它们共同协作来帮助开发互联网之间的数据交换和应用程序。这是由于XML实际上已经是不同系统之间交换数据的标准,而Java技术提供了平台的可移植性。这种搭档的关系尤其适用于Web Service,Web Service应用于不同平台不同语言开发的系统。所以Java+XML被认为是理想的开发Web Service的工具。
但是如何将Java和XML结合在一起呢?更具体一点,如何通过java语言来存取一个XML文档呢?最典型的方式就是使用符合Simple API for XML(SAX)或者Document Object Model(DOM)规范的解析器来完成。Java API for XML Processing(JAXP) 提供了这些解析器。Java开发人员可以通过JAXP API来激活SAX或者DOM解析器,然后解析XML文档。解析的过程就是遍历文档,然后将它们逻辑的分成独立的片段。解析后的内容就可以通过应用程序访问了。SAX解析器在文档开始的时候就开始解析文档,这种情况下不在内存中保存DOM树。应用程序可以随时操作从解析器中获取的数据,但是不能做任何内存中数据的操作。例如无法更新内存中的数据然后返回更新数据后的XML文件。
DOM解析器在内存中创建一棵表示文档中内容的树,这个树是由对象组成的。然后应用程序就可以访问树中的数据,并且可以操作数中的数据。
现在,开发人员可以使用另外一种更简单的技术来访问XML文档,Java Architecture for XML Binding(JAXB),现在在Java Web Service Developer Pack中已经包含了该API的一种参考实现。
JAXB的框架结构如下:
XML Schema-->Binding Compiler(XJC tool)-->Schema-Derived Classes & Interfaces
Application
XML Document<--marshal()--JAXB API—-unmarshal()-->Conent Objects
2. SAX/DOM访问XML文档
假设需要开发一个java应用程序来访问XML文档,并显示XML文档中的数据。样例文档如下:
<?xml version="1.0"?>
<Collection>
<books>
<book itemId="999">
<name>Learning JAXB</name>
<ISBN>123445</ISBN>
<price>34 $</price>
<authors>
<authorName>Jane Doe</authorName>
</authors>
<description>
This books contains step by step instructions for
beginners so that they can start using Java API for XML
Binding.
</description>
<promotion>
<Discount>
10% on this book if purchased by March 2003
</Discount>
</promotion>
<publicationDate>2003-01-01</publicationDate>
<bookCategory>other</bookCategory>
</book>
<book itemId="129">
<name>Java Webservices today and Beyond</name>
<ISBN>522965</ISBN>
<price>29 $</price>
<authors>
<authorName>John Brown</authorName>
<authorName>Peter T.</authorName>
</authors>
<description>
This books contains information for users so that they
can start using Java Web Services Developer Pack.
</description>
<promotion>
<Discount>
Buy one get Learning webservices Part 1 free
</Discount>
</promotion>
<publicationDate>2002-11-01</publicationDate>
<bookCategory>magazine</bookCategory>
</book>
</books>
</Collection>
上面的文档包含了关于books的数据,例如book name,author,description等等。可以使用SAX或者DOM的方式来访问XML文档然后显示数据。例如使用SAX的方式,需要进行如下的操作:
创建一个SAX解析器,然后使用解析器解析XML文档,SAX解析器从文档的开始进行解析。当遇到一些重要的内容是时(SAX的属于叫做事件),例如XML的开始标签,此时应用程序就可以访问它的数据。
创建一个content handler,并定义方法来接受解析器的激活的事件,这些方法,叫做回调callback方法,对返回的数据进行适当的操作。
下面是一个使用JAXP来创建和使用SAX解析器来解析一个XML文档。这个程序使用了MyContentHandler来显示SAX解析器传送的数据。
/**
* $Id: UsingJAXPTest1.java,v 1.1 2003/01/01 03:18:32 bhakti Exp $
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license