三、JAXB的运用:
1、新建一个xml schema文件 po.xsd:
<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:elementname="purchaseOrder"type="PurchaseOrderType"/>
<xsd:elementname="comment"type="xsd:string"/>
<xsd:complexTypename="PurchaseOrderType">
<xsd:sequence>
<xsd:elementname="shipTo"type="USAddress"/>
<xsd:elementname="billTo"type="USAddress"/>
<xsd:elementref="comment"minOccurs="0"/>
<xsd:elementname="items"type="Items"/>
</xsd:sequence>
<xsd:attributename="orderDate"type="xsd:date"/>
</xsd:complexType>
<xsd:complexTypename="USAddress">
<xsd:sequence>
<xsd:elementname="name"type="xsd:string"/>
<xsd:elementname="street"type="xsd:string"/>
<xsd:elementname="city"type="xsd:string"/>
<xsd:elementname="state"type="xsd:string"/>
<xsd:elementname="zip"type="xsd:decimal"/>
</xsd:sequence>
<xsd:attributename="country"type="xsd:NMTOKEN"fixed="US"/>
</xsd:complexType>
<xsd:complexTypename="Items">
<xsd:sequence>
<xsd:elementname="item"minOccurs="1"maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:elementname="productName"type="xsd:string"/>
<xsd:elementname="quantity">
<xsd:simpleType>
<xsd:restrictionbase="xsd:positiveInteger">
<xsd:maxExclusivevalue="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:elementname="USPrice"type="xsd:decimal"/>
<xsd:elementref="comment"minOccurs="0"/>
<xsd:elementname="shipDate"type="xsd:date"minOccurs="0"/>
</xsd:sequence>
<xsd:attributename="partNum"type="SKU"use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<!--StockKeepingUnit,acodeforidentifyingproducts-->
<xsd:simpleTypename="SKU">
<xsd:restrictionbase="xsd:string">
<xsd:patternvalue="d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
2、生成XML Schema 文件对应的类:
(1)在环境变量的系统变量的PATH中加入 <jwsdp安装目录>\jaxb\bin,(我的是C:\jwsdp-2.0\jaxb\bin;) 然后以命令行的形式运行:
….\xjc po.xsd -d src -p epri.jaxb
其中
·po.xsd 是Schema的文件名;
·-d 的选项,是指定系统生成的Java源代码所放置的目录;
·-p 的选项,是指定系统生成的Java源代码所在的Java Package的名称。
注:-d 和 -p 都可以不写,直接运行: xjc po.xsd (不建议)
例如:我们将po.xsd 放于C盘根目录下:
可以看到生成了两个java文件,它们就是po.xsd对应的实体类。
(2)编写一个ant文件,用于在工程中直接生成XML Schema 文件对就的类,如下:
<?xmlversion="1.0"?>
<projectbasedir="."default="compile">
<!--这里是jwsdp的安装目录-->
<propertyname="jwsdp.home"value="C:jwsdp-2.0"/>
<pathid="classpath">
<pathelementpath="build"/>
<filesetdir="${jwsdp.home}"includes="jaxb/lib/*.jar"/>
<filesetdir="${jwsdp.home}"includes="jwsdp-shared/lib/*.jar"/>
<filesetdir="${jwsdp.home}"includes="jaxp/lib/**/*.jar"/>
</path>
<taskdefname="xjc"classname="com.sun.tools.xjc.XJCTask">
<classpathrefid="classpath"/>
</taskdef>
<!--compileJavasourcefiles-->
<targetname="compile">
<!--generatetheJavacontentclassesfromtheschema-->
<echomessage="Compilingtheschemaexternalbindingfile..."/>
<xjcschema="po.xsd"package="primer.po"target="src"/>
<!--compileallofthejavasources-->
<echomessage="Compilingthejavasourcefiles..."/>
</target>
</project>
Run As -> Ant Build XML Schema就可以生成对应的实体类,当然po.sxd 和 build.xml都应位于工程的根目录下!
3、写一个测试的java文件
Main.java:
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.math.BigDecimal;
importjava.math.BigInteger;
importjava.util.GregorianCalendar;
importjava.util.List;
importjavax.xml.bind.JAXBContext;
importjavax.xml.bind.JAXBElement;
importjavax.xml.bind.JAXBException;
importjavax.xml.bind.Marshaller;
importjavax.xml.bind.*;
importjavax.xml.datatype.DatatypeFactory;
importjavax.xml.datatype.XMLGregorianCalendar;
importjavax.xml.datatype.DatatypeConfigurationException;
importprimer.po.*;
publicclassMain{
publicstaticvoidmain(String[]args){
try{
JAXBContextjc=JAXBContext.newInstance("primer.po");
PurchaseOrderTypepo=newPurchaseOrderType();
po.setOrderDate(getDate());
USAddressshipTo=createUSAddress("AliceSmith",
"123MapleStreet",
"Cambridge",
"MA",
"12345");
po.setShipTo(shipTo);
USAddressbillTo=createUSAddress("RobertSmith",
"8OakAvenue",
"Cambridge",
"MA",
"12345");
po.setBillTo(billTo);
Itemsitems=newItems();
List<Items.Item>itemList=items.getItem();
//startaddingItemTypeobjectsintoit
itemList.add(createItem("Nosferatu-SpecialEdition(1929)",
newBigInteger("5"),
newBigDecimal("19.99"),
null,
null,
"242-NO"));
itemList.add(createItem("TheMummy(1959)",
newBigInteger("3"),
newBigDecimal("19.98"),
null,
null,
"242-MU"));
itemList.add(createItem("GodzillaandMothra:BattleforEarth/Godzillavs.KingGhidora",
newBigInteger("3"),
newBigDecimal("27.95"),
null,
null,
"242-GZ"));
po.setItems(items);
JAXBElement<PurchaseOrderType>poElement=(newObjectFactory()).createPurchaseOrder(po);
Marshallerm=jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
m.marshal(poElement,newFileOutputStream("test.xml"));
m.marshal(poElement,System.out);
}catch(JAXBExceptionje){
je.printStackTrace();
}catch(IOExceptionioe){
ioe.printStackTrace();
}
}
publicstaticUSAddresscreateUSAddress(Stringname,Stringstreet,
Stringcity,Stringstate,
Stringzip){
USAddressaddress=newUSAddress();
address.setName(name);
address.setStreet(street);
address.setCity(city);
address.setState(state);
address.setZip(newBigDecimal(zip));
returnaddress;
}
publicstaticItems.ItemcreateItem(StringproductName,
BigIntegerquantity,
BigDecimalprice,
Stringcomment,
XMLGregorianCalendarshipDate,
StringpartNum){
Items.Itemitem=newItems.Item();
item.setProductName(productName);
item.setQuantity(quantity);
item.setUSPrice(price);
item.setComment(comment);
item.setShipDate(shipDate);
item.setPartNum(partNum);
returnitem;
}
privatestaticXMLGregorianCalendargetDate(){
try{
returnDatatypeFactory.newInstance().newXMLGregorianCalendar(newGregorianCalendar());
}catch(DatatypeConfigurationExceptione){
thrownewError(e);
}
}
}
用Java Application运行 SayHelloClient.java
输出结果:
在axisweb工程根目录下生成了一个test.xml 的文件,内容和上面一样!
分享到:
相关推荐
在这个"axis部署WebServices 和 JAXB的使用"主题中,我们将深入探讨这两个关键技术及其协同工作。 首先,让我们关注Axis的部署过程。Axis1.3是Axis的一个较旧版本,但仍然适用于许多遗留系统。部署Web服务的基本...
Apache Axis是开源的Java库,专门用于构建和部署Web服务,它简化了SOAP(简单对象访问协议)消息的处理。在这个例子中,我们将深入探讨如何使用Axis来实现自定义类的序列化和反序列化,这是Web服务通信中的关键环节...
总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...
- **Axis**: Axis是Apache的一个开源项目,用于构建和部署Web Services。首先创建一个新的Java工程,将Axis的JAR文件添加到项目的类路径中。这些文件通常包括`axis.jar`, `jaxrpc.jar`, `saaj.jar`, `wsdl4j.jar`等...
Axis2是Apache软件基金会开发的一款高性能、灵活且可扩展的Web服务引擎,它为开发者提供了一个强大而全面的平台来创建和部署Web服务。在Eclipse集成开发环境中, Axis2 WebService插件扮演着至关重要的角色,使得...
Apache Axis是实现Web服务的重要工具,尤其在Java环境中,它为开发、部署和消费Web服务提供了全面的支持。本篇文章将深入探讨如何利用Apache Axis来创建Web服务。 一、Web服务基础 Web服务基于开放标准,如XML(可...
【Axis Web Service】是一种基于Java的开源Web服务框架,它由Apache软件基金会开发,主要用于创建和部署Web服务。Axis提供了一种简单的方式来实现SOAP(Simple Object Access Protocol)通信,允许不同平台上的应用...
CXF支持WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile等webservices标准,Axis2支持WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本中得到支持。 CXF的标准支持...
AXIS是Apache软件基金会开发的一个开源工具,专门用于创建、部署和管理Web服务。本教程将带你深入理解如何使用AXIS开始你的Web服务之旅。 一、AXIS简介 AXIS作为Java平台上的Web服务工具,提供了强大的功能,如自动...
这本书详尽地介绍了如何构建、部署和运行Java Web服务,旨在帮助读者快速掌握这一领域的核心概念和技术。 Java Web服务是基于开放标准(如SOAP、WSDL和UDDI)的应用程序,使得不同系统之间能够进行通信和数据交换。...
在Java编程语言中,访问Web Services接口是一项常见的任务,特别是在构建Android应用时,因为Web Services提供了数据交换和远程调用功能。本实例将探讨如何在Java中实现这一过程,特别适用于Android开发。以下是一个...
标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...
- Axis2提供了更多高级功能,如数据绑定的选择(通过`-d`指定,可以选择`adb`、`xmlbeans`、`jibx`、`jaxme`和`jaxbri`)。 2. **部署描述文件的生成**: - 在Axis中,可以通过添加`-D`选项来生成部署描述文件...
作者Kent Kai Ok Tong以简明扼要的方式介绍了一系列复杂的Web服务标准和技术,并通过实际示例帮助读者掌握Apache CXF和Axis2这两个流行的开源框架。 #### 二、核心知识点解析 ##### 1. **Apache CXF与Axis2简介** ...
【Axis入门中文文档】是针对Web Service开发的一款关键工具,主要使用了Axis框架,该框架是Apache软件基金会下的一个开源项目,专门用于构建和部署基于SOAP(Simple Object Access Protocol)的Web服务。本文将深入...
AXIS2是一个流行的开源Web服务框架,用于创建和部署SOAP(简单对象访问协议)和RESTful服务。这个压缩包文件包含AXIS2运行时所需的全部jar包,它们是开发和运行基于AXIS2的Web服务不可或缺的部分。这些jar包提供了...
Axis2是Apache Axis的第二代版本,它在第一代的基础上进行了许多改进和优化,提供了更高效、灵活的Web服务解决方案。Axis2基于模块化设计,允许用户按需选择功能,从而降低了内存占用和提高了性能。它支持多种协议,...
Axis1.4版本是该框架的一个稳定发行版,包含了对SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)的支持。 1. **SOAP与WSDL**: SOAP是一种基于XML的协议,用于在Web上交换结构...
- 使用这两个版本的Axis2都需要对Java和Web服务有一定的理解,特别是SOAP协议、WSDL(Web Services Description Language)和XML。 - 配置文件axis2.xml是关键,它决定了服务的行为、模块加载、日志设置等。 - ...
在这个教程中,我们将探讨如何使用MyEclipse创建并部署Web服务,以及如何通过xfire和axis客户端进行调用。 首先,让我们了解Web服务的基础知识。Web服务通常基于SOAP(简单对象访问协议),它定义了一种交换结构化...