创建一个JAXBContext
一个JAXBContext对象被用来实现JAXB绑定框架的操作:marshal, unmarshal和validate。应用使用静态方法newInstance(String contextPath)来创建一个新实例(对象)。contextPath指明一组由模式生成的接口的包名。
JAXBContext jaxbContext=JAXBContext.newInstance("generated");
目录generated包含了JAXB生成的类和接口
使用createMarshaller方法创建一个Marshaller。Marshaller类重载了marshal方法,可以将Java对象序列化(也就是,转换一个Java对象到XML数据)成SAX2事件,文档对象模型(DOM),OutputStream, javax.xml.transform.Result或者java.io.Writer对象。
Marshaller marshaller=jaxbContext.createMarshaller();
为XML文档创建一个Java对象:CatalogImpl
为了创建一个Java对象,首选生成一个ObjectFactory。ObjectFactory将会创建一个实现类的实例。对于每一个模式生成的Java类,ObjectFactory中定义了一个静态方法来创建一个它的对象。
ObjectFactory factory=new ObjectFactory();
使用ObjectFactory类中的createCatalog来创建一个catalog元素。CatalogImpl是Catalog接口的实现类。
CatalogImpl catalog=(CatalogImpl)(factory.createCatalog());
使用CatalogImpl类中的setSection方法来设置catalog元素的section属性。
catalog.setSection("Java Technology");
用setPublisher方法来设置catalog元素的publisher属性。
catalog.setPublisher("IBM developerWorks");
为XML文档创建一个Java对象:JournalImpl和ArticleImpl
用ObjectFactory类中的createJournal方法来创建一个jounal元素。JournalImpl是Journal接口的实现类。
JournalImpl journal=(JournalImpl)(factory.createJournal());
将journal元素加入catalog元素。从CatalogImpl得到JournalImpl的java.util.List,并把journal元素加入到List中。
java.util.List journalList=catalog.getJournal();journalList.add(journal);
使用ObjectFactory类的createArticle方法来创建journal中的article元素。ArticleImpl是Article接口的实现类。
ArticleImpl article=(ArticleImpl)(factory.createArticle());
使用ArticleImpl类中的setLevel方法来设置article元素的level属性。
article.setLevel("Intermediate");
用setDate方法设置article的date属性
article.setDate("January-2004");
用setTitle方法创建article元素的title属性
article.setTitle("Service Oriented Architecture Frameworks");
用setAuthor方法创建article元素的author属性
article.setAuthor("Naveen Balani");
将article元素加入journal元素中。从JournalImpl中得到ArticleImpl的java.util.List,并将article元素加入List中。
java.util.List articleList=journal.getArticle(); articleList.add(article);
与创建article元素的过程相类似,其它article元素也将被创建用来生成示例XML文档catalog.xml
将Java对象序列化为一个XML文档
用Marshaller类中的marshal方法来将CatalogImpl对象序列化为一个XML文档。CatalogImpl对象被序列化为一个OutputStream
marshaller.marshal(catalog, new FileOutputStream(xmlDocument));
xmlDocument是输出的XML的java.io.File对象,它代表的是本节一开始所展示的XML文档。JAXBConstructor.java,这个程序用来从Java类中生成一个XML文档,也在这篇文章的示例代码文件中。
总结
JAXB提供了一个绑定编译器xjc, 从一个模式中生成Java对象,然后这些Java对象可以序列化为一个XML文档。但是,JAXB有一个限制:它不支持所有的XML模式结构。
