尝试了一下JAXB2.0

原创 2007年09月21日 23:42:00

JAXB2.0使用
以前实习的时候用过JAXB1.x,据说JAXB2.0使用了Java 5.0的新特性,例如注解、泛型,使得JAXB更容易使用,于是从
网上下来试了一下:

https://jaxb.dev.java.net/servlets/ProjectDocumentList?folderID=6344&expandFolder=6344&folderID=0
下载到JAXB2_20061115.jar,为了方便使用把JAXB2_20061115.jar拷到工程中,本事例使用Eclipse开发,工程目录
为:D:/eclipse/workspace/JaxbTest,可以新建一个目录jaxb来存放JAXB2_20061115.jar,在命令行下,把目录切换
到jaxb下(当然开始要配置好环境变量),使用java -jar JAXB2_20061115.jar生成一个目录:jaxb-ri-20061115,里面
有bin和lib,在bin目录下新建一个generator.bat的批处理:
xjc -d D:/eclipse/workspace/JaxbTest/src -p "edu.jlu.xml" "D:/eclipse/workspace/JaxbTest/schema/messages.xsd"
其中D:/eclipse/workspace/JaxbTest/src为原文件的目录,edu.jlu.xml为生成Java类的包名,D:/eclipse/workspace/JaxbTest/schema/messages.xsd为xml schema文件的路径。
这样以后我们每次修改messages.xsd,我们只需要双击generator.bat来更新Java类就可以了。
下面我们我们在messages.xsd定义schema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
<xsd:element name="catalog" type="catalogType"/>
 
<xsd:complexType name="catalogType">
  
<xsd:sequence>
   
<xsd:element ref="journal"  minOccurs="0" maxOccurs="unbounded"/>
  
</xsd:sequence>
  
<xsd:attribute name="section" type="xsd:string"/>
  
<xsd:attribute name="publisher" type="xsd:string"/>
 
</xsd:complexType>
 
<xsd:element name="journal" type="journalType"/>
 
<xsd:complexType name="journalType">
  
<xsd:sequence>
   
<xsd:element ref="article"  minOccurs="0" maxOccurs="unbounded"/>
  
</xsd:sequence>
 
</xsd:complexType>
 
<xsd:element name="article" type="articleType"/>
 
<xsd:complexType name="articleType">
  
<xsd:sequence>
   
<xsd:element name="title" type="xsd:string"/>
   
<xsd:element name="author" type="xsd:string"/>
  
</xsd:sequence>
  
<xsd:attribute name="level" type="xsd:string"/>
  
<xsd:attribute name="date" type="xsd:string"/>
 
</xsd:complexType>
</xsd:schema> 

然后双击generator.bat就可以生成Java类了,本例我们生成了ArticleType.java,CatalogType.java,
JournalType.java和ObjectFactory.java
一般我们会对XML根的那个element对应的Java类,写一个实用的xml与object之间转换的类,本例中
为那个element为catalog,对应的Java类为CatalogType.java,我们可以写一个CatalogTypeUtils来帮助
我们实现xml与object之间的转换:

 

package edu.jlu.xml;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class CatalogTypeUtils {
    
private static JAXBContext jaxbContext = null;
    
private static Marshaller marshaller = null;
    
private static ObjectFactory factory = null;
/*
 *@param catalogType is the object that is used to build xml
 *@param xmlDocument is the file where xml to output
*/

    
public static void buildXml(CatalogType catalogType, File xmlDocument) {

        
try {
            jaxbContext 
= JAXBContext.newInstance("edu.jlu.xml");
            marshaller 
= jaxbContext.createMarshaller();
            ObjectFactory factory 
= new ObjectFactory();
            JAXBElement
<CatalogType> catalogElement = factory.createCatalog(catalogType);
            marshaller.marshal(catalogElement,
new FileOutputStream(xmlDocument));
        }
 catch (FileNotFoundException e) {
            e.printStackTrace();
        }
 catch (JAXBException e) {
            e.printStackTrace();
        }

    }

 
/*
  *@param xmlDocument the xml file to build object 
  *@return the built object
  
*/

    
public static CatalogType buildObject(File xmlDocument) {
        JAXBElement
<CatalogType> catalogElement = null;
        
try {
            JAXBContext jaxbContext 
= JAXBContext.newInstance("edu.jlu.xml");
            Unmarshaller unMarshaller 
= jaxbContext.createUnmarshaller();
            catalogElement 
= (JAXBElement<CatalogType>) unMarshaller.unmarshal(xmlDocument);
        }
 catch (Exception e) {
            e.printStackTrace();
        }

        
return catalogElement.getValue();
    }

}

下面我们做一下测试:

 

package edu.jlu.test;

import java.io.File;
import edu.jlu.xml.ArticleType;
import edu.jlu.xml.CatalogType;
import edu.jlu.xml.CatalogTypeUtils;
import edu.jlu.xml.JournalType;
import edu.jlu.xml.ObjectFactory;

public class Test {
    
private ObjectFactory factory = new ObjectFactory();
    
/*
     * @param xmlDocument is the output xml file 
     
*/

    
public void testObject2Xml(File xmlDocument) {        
            CatalogType catalog 
= factory.createCatalogType();
            assmbleCatalogForTest(catalog);
            CatalogTypeUtils.buildXml(catalog,xmlDocument);
    }

    
/*
     * @param xmlDocument is the source xml file for generating Object
     
*/

    
public CatalogType testXml2Object(File xmlDocument){
        
return CatalogTypeUtils.buildObject(xmlDocument);
    }

    
/*
     * This function is used to assmble CatalogType object for test
     
*/

    
private CatalogType assmbleCatalogForTest(CatalogType catalog){
        catalog.setSection(
"Java Technology");
        catalog.setPublisher(
"IBM developerWorks");

        JournalType journal 
= factory.createJournalType();
        ArticleType article 
= factory.createArticleType();

        article.setLevel(
"Intermediate");
        article.setDate(
"January-2004");
        article.setTitle(
"Service Oriented Architecture Frameworks");
        article.setAuthor(
"Naveen Balani");

        java.util.List journalList 
= catalog.getJournal();
        journalList.add(journal);
        java.util.List articleList 
= journal.getArticle();
        articleList.add(article);

        article 
= factory.createArticleType();
        article.setLevel(
"Advanced");
        article.setDate(
"October-2003");
        article.setTitle(
"Advance DAO Programming");
        article.setAuthor(
"Sean Sullivan");
        articleList 
= journal.getArticle();
        articleList.add(article);

        article 
= factory.createArticleType();
        article.setLevel(
"Advanced");
        article.setDate(
"May-2002");
        article.setTitle(
"Best Practices in EJB Exception Handling");
        article.setAuthor(
"Srikanth Shenoy");

        articleList 
= journal.getArticle();
        articleList.add(article);
        
return catalog;
    }

    
    
public static void main(String[] argv) {
        Test test 
= new Test();
        test.testObject2Xml(
new File("E:/hello.xml"));
        CatalogType type 
= test.testXml2Object(new File("E:/hello.xml"));
        System.out.println(type.getPublisher());
    }

}
我们发现JAXB2.0比以前简单多了,并且生成的代码少了许多。(以前会生成type接口和Type的
实现类,其实生成的Object分离出接口的意义并不大,JAXB2.0直接生成一个type具体的class,
并且代码比以前更易读了)
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

简单封装jaxb2.0

import java.io.StringReader; import java.io.StringWriter; import java.util.Collection; import jav...

Jaxb2.0实现Java Object转换Xml转换Java Object.

//测试类import com.toft.webservice.client.domino.DominoObject; import com.toft.webservice.core.JaxbBin...

没有了TestFlight,为什么不尝试一下DeployGate呢

DeployGate介绍 DeployGate是一个App的分发测试平台,如同TestFlight。在Android的支持上,其易用性已超过了TestFlight。 2014.2.19号,Depl...

开始尝试一下soap,用python访问wsdl服务

实验一下天气预报Webservice服务,数据来源于中国气象局:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdlpyth...

尝试一下sql server2016里面的json功能

 前2天下载了一个2016的rc版本来玩一下,首先感觉是~开发者版本免费啦!!撒花!!!另外一个东西,sql server 2016能支持json 的解析和应用啦,虽然我不知道它的性能如何,先来...
  • eit520
  • eit520
  • 2016-04-21 22:16
  • 2738

jaxb2.0 JEE5

  • 2008-09-09 09:26
  • 7.80MB
  • 下载

总结一下mobile下dll加载不上这几天的尝试的情况。。。

首先给出我的dll #include "stdafx.h" #include "T21Service.h" HINSTANCE g_hInst; BOOL APIENTRY DllMain...

Windows上安装Redmine-2.6.0的日志(话说这个软件还是不如JIRA好用,话说是不是再尝试一下trac?)

C:\redmine-2.6.0>gem install bundler Fetching: bundler-1.6.2.gem (100%) Successfully installed bun...
  • cteng
  • cteng
  • 2014-11-01 21:35
  • 2061

jaxb-api-2.0.jar

  • 2012-03-21 09:34
  • 71KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)