一.JAXB是什么?
Java Architecture for XML Binding (JAXB)是一种Java技术,通过这种技术你可以从XML 模式生成Java类。作为这一过程的一部分,JAXB技术还提供将XML实例文档反编组为Java对象的一个内容树,然后再将内容树编组成一个XML文档。JAXB提供了一种快速和方便的方式来将一个XML模式绑定到Java代码的一个表示上,使得Java开发者能够更轻松地将XML数据和Java应用中的处理函数融合在一起,而不必对XML本身有很多的了解。
JAXB技术的一个好处就是它隐藏了细节,排除了SAX和DOM中的外部联系——生成的JAXB类仅仅描述了在源模式中实际定义了的关系。其结果就是产生了具有高度可移植性的XML数据,加入了具有高度可移植性的Java代码,这些Java代码可用于创建灵活的、轻量级的应用和Web服务。
二.你必须有两个文件,一个是xml,一个是与他相对应的xsd
现成的有两个文件可以从http://java.sun.com/developer/technicalArticles/WebServices/jaxb/上找到books.xml与books.xsd
books.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.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="1.0">
<xs:element name="Collection">
<xs:complexType>
<xs:sequence>
<xs:element name ="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="ISBN" type="xs:long"/>
<xs:element name="price" type="xs:string"/>
<xs:element name="authors" >
<xs:complexType>
<xs:sequence>
<xs:element name="authorName" type="xs:string" minOccurs="1"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="promotion">
<xs:complexType>
<xs:choice>
<xs:element name="Discount" type="xs:string" />
<xs:element name="None" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="publicationDate" type="xs:date"/>
<xs:element name="bookCategory">
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="magazine" />
<xs:enumeration value="novel" />
<xs:enumeration value="fiction" />
<xs:enumeration value="other" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="itemId" type="xs:string" />
</xs:complexType>
<xs:simpleType name="bookCategoryType" >
<xs:restriction base="xs:string">
<xs:enumeration value="magazine" />
<xs:enumeration value="novel" />
<xs:enumeration value="fiction" />
<xs:enumeration value="other" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
三.安装jwsdp-2.0
下载地址:http://java.sun.com/webservices/downloads/webservicespack.html别忘了设置环境变量
下面是有关jwsdp的详细情况
JWSDP提供了库和工具的集合,包含了开发和测试WEB服务的必需组件。除了标准的接口库外,还提供了每个库的引用实现。
JWSDP组件介绍:
1,JAXP:
XML处理的Java API(Java API for XML Processing,JAXP)提供了解析和转换 XML文档的标准化接口。
2,JAXM:
JAXM提供SOAP1.1带附件的SOAP标准接口,以便Java程序员能够方便地发送和接 收SOAP消息。JAXM给厂商提供了一种机制,既 可以用于支持可靠的消息传输,也可以用于部分填充特定基于SOAP协议(如 ebXML)的SOAP消息。
3,JAX-RPC
基于XML远程过程调用的Java API(Java API for XML-based Remote ProcedureCalls,JAX-RPC)提供了一种机制,使得可以通 过基于SOAP的消息跨网络调用对象。对于JAX-RPC,事实上可以使用任何支持SOAP的语言在跨网络(包括Internet)的机器上托管 Java对象的实现。JAX-RPC的作用与RMI大致相同,因为创建的插件(Stub)对象可以用于调用远程对象。从概念上讲,可以同样 地使用这两个系统。JAX-RPC和RMI的不同之处在于两台机器之间所传递的数据格式。RMI使用底层的Java特有的协议(或CORBA
IIOP),而JAX-RPC使用的则是XML。
4,JAXR:
JAXR(XML注册中心的Java API,Java API for XML Registries)提供了查询注册中心的抽象接口;JAXR可用来让用户不必了解 UDDI或ebXML RegRep的细节。
5,JSSE:
JSSE提供了一种机制,可用于在加密的网络连接上进行通信,并且管理与加密有关的密匙。JSSE提供了免版税的SSL v3(安全 套接字层,Secure Sockets Layer)的实现和TLS(传输层安全,Transport Layer Security)1.0的支持。JSSE还提供了附加的 URL处理器,以便java.net.URL类能够理解和处理HTTPURL.
6,JSTL:
JSP的标准标签库
7,ANT和TOMCAT
ANT是一个开放工源代码构建工具,ANT起源于创建WAR(Web应用归档)的内置任务,WAR是Java Web服务的默认封装。Tomcat 是 JSP和Servlet标准的引用实现。它同样允许开发基于servlet的web服务托管,例如那些JAXM支持。
8,JWSDP也包括WSDP(WEB服务开发人员包,Web Services Developer
Package)Registry服务器。这是一个简单的UDDI服务器,可用于开发和测试
源文来源:http://www.iteye.com/topic/419455
四.生成代码绑定schema
D:\EclipseWorkSpace\cxfdemo\src>xjc.bat -p com.ce.open.sample books.xsd -d src
parsing a schema...
compiling a schema...
com\ce\open\sample\BookCategoryType.java
com\ce\open\sample\BookType.java
com\ce\open\sample\Collection.java
com\ce\open\sample\ObjectFactory.java
其中 -p为生成代码的包名 后面为xml文件名 -d 为生成代码的存放位置
五.测试
public class Jaxbdemo {
public static void main(String[] args) {
try {
//books.xsd生成的包名
JAXBContext jc = JAXBContext.newInstance("com.ce.open.sample");
Unmarshaller unmarshaller = jc.createUnmarshaller();
//注意这里的Collection是上面生成的不是java.util.Collection
Collection collection = (Collection) unmarshaller.unmarshal(new File("src/books.xml"));
Books books = (Books) collection.getBooks();
List<BookType> bookList = books.getBook();
for(BookType type : bookList){
System.out.println(type.getName());
}
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
六.相关资源链接
http://java.sun.com/developer/technicalArticles/WebServices/jaxb/
http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/index.htm
http://java.sun.com/webservices/docs/1.5/tutorial/doc/JAXBUsing.html
http://www.xyzws.com/scdjws/studyguide/jaxb_samples2.0.html
http://java.sun.com/webservices/downloads/webservicespack.html (Java Web Services Developer Pack (Java WSDP) )