`
gudao8192
  • 浏览: 95337 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

axis部署WebServices 和 JAXB的运用 (二)

阅读更多
三、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部署WebServices 和 JAXB的使用"主题中,我们将深入探讨这两个关键技术及其协同工作。 首先,让我们关注Axis的部署过程。Axis1.3是Axis的一个较旧版本,但仍然适用于许多遗留系统。部署Web服务的基本...

    axis web services 例子

    Apache Axis是开源的Java库,专门用于构建和部署Web服务,它简化了SOAP(简单对象访问协议)消息的处理。在这个例子中,我们将深入探讨如何使用Axis来实现自定义类的序列化和反序列化,这是Web服务通信中的关键环节...

    webServices学习之二——axis1传递复杂类型javabean

    总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...

    Web Services发布与调用(axis,xfire)

    - **Axis**: Axis是Apache的一个开源项目,用于构建和部署Web Services。首先创建一个新的Java工程,将Axis的JAR文件添加到项目的类路径中。这些文件通常包括`axis.jar`, `jaxrpc.jar`, `saaj.jar`, `wsdl4j.jar`等...

    Axis2 Eclipse WebService插件

    Axis2是Apache软件基金会开发的一款高性能、灵活且可扩展的Web服务引擎,它为开发者提供了一个强大而全面的平台来创建和部署Web服务。在Eclipse集成开发环境中, Axis2 WebService插件扮演着至关重要的角色,使得...

    WebServices With Apache Axis.pdf

    Apache Axis是实现Web服务的重要工具,尤其在Java环境中,它为开发、部署和消费Web服务提供了全面的支持。本篇文章将深入探讨如何利用Apache Axis来创建Web服务。 一、Web服务基础 Web服务基于开放标准,如XML(可...

    axis web Service

    【Axis Web Service】是一种基于Java的开源Web服务框架,它由Apache软件基金会开发,主要用于创建和部署Web服务。Axis提供了一种简单的方式来实现SOAP(Simple Object Access Protocol)通信,允许不同平台上的应用...

    cxf与axis2区别

    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 开始 Web 服务之旅

    AXIS是Apache软件基金会开发的一个开源工具,专门用于创建、部署和管理Web服务。本教程将带你深入理解如何使用AXIS开始你的Web服务之旅。 一、AXIS简介 AXIS作为Java平台上的Web服务工具,提供了强大的功能,如自动...

    Java Web Services: up and running

    这本书详尽地介绍了如何构建、部署和运行Java Web服务,旨在帮助读者快速掌握这一领域的核心概念和技术。 Java Web服务是基于开放标准(如SOAP、WSDL和UDDI)的应用程序,使得不同系统之间能够进行通信和数据交换。...

    JAVA访问WebServices接口的简单实例,android可用

    在Java编程语言中,访问Web Services接口是一项常见的任务,特别是在构建Android应用时,因为Web Services提供了数据交换和远程调用功能。本实例将探讨如何在Java中实现这一过程,特别适用于Android开发。以下是一个...

    axis2-1.6.1

    标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    - Axis2提供了更多高级功能,如数据绑定的选择(通过`-d`指定,可以选择`adb`、`xmlbeans`、`jibx`、`jaxme`和`jaxbri`)。 2. **部署描述文件的生成**: - 在Axis中,可以通过添加`-D`选项来生成部署描述文件...

    Developing Web Services with Apache CXF and Axis2_3rd Edition

    作者Kent Kai Ok Tong以简明扼要的方式介绍了一系列复杂的Web服务标准和技术,并通过实际示例帮助读者掌握Apache CXF和Axis2这两个流行的开源框架。 #### 二、核心知识点解析 ##### 1. **Apache CXF与Axis2简介** ...

    axis入门中文文档

    【Axis入门中文文档】是针对Web Service开发的一款关键工具,主要使用了Axis框架,该框架是Apache软件基金会下的一个开源项目,专门用于构建和部署基于SOAP(Simple Object Access Protocol)的Web服务。本文将深入...

    AXIS2接口依赖jar包

    AXIS2是一个流行的开源Web服务框架,用于创建和部署SOAP(简单对象访问协议)和RESTful服务。这个压缩包文件包含AXIS2运行时所需的全部jar包,它们是开发和运行基于AXIS2的Web服务不可或缺的部分。这些jar包提供了...

    axis2的API,axis2 API,axis2帮助文档

    Axis2是Apache Axis的第二代版本,它在第一代的基础上进行了许多改进和优化,提供了更高效、灵活的Web服务解决方案。Axis2基于模块化设计,允许用户按需选择功能,从而降低了内存占用和提高了性能。它支持多种协议,...

    web service axis1.4 jar

    Axis1.4版本是该框架的一个稳定发行版,包含了对SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)的支持。 1. **SOAP与WSDL**: SOAP是一种基于XML的协议,用于在Web上交换结构...

    Axis2-1.6.2-bin和Axis2-1.6.2-war

    - 使用这两个版本的Axis2都需要对Java和Web服务有一定的理解,特别是SOAP协议、WSDL(Web Services Description Language)和XML。 - 配置文件axis2.xml是关键,它决定了服务的行为、模块加载、日志设置等。 - ...

    MyEclipse 开发部署 Web Service

    在这个教程中,我们将探讨如何使用MyEclipse创建并部署Web服务,以及如何通过xfire和axis客户端进行调用。 首先,让我们了解Web服务的基础知识。Web服务通常基于SOAP(简单对象访问协议),它定义了一种交换结构化...

Global site tag (gtag.js) - Google Analytics