使用axis2进行WebService的开发.docx

上传人:b****7 文档编号:11204038 上传时间:2023-02-25 格式:DOCX 页数:9 大小:18.86KB
下载 相关 举报
使用axis2进行WebService的开发.docx_第1页
第1页 / 共9页
使用axis2进行WebService的开发.docx_第2页
第2页 / 共9页
使用axis2进行WebService的开发.docx_第3页
第3页 / 共9页
使用axis2进行WebService的开发.docx_第4页
第4页 / 共9页
使用axis2进行WebService的开发.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

使用axis2进行WebService的开发.docx

《使用axis2进行WebService的开发.docx》由会员分享,可在线阅读,更多相关《使用axis2进行WebService的开发.docx(9页珍藏版)》请在冰豆网上搜索。

使用axis2进行WebService的开发.docx

使用axis2进行WebService的开发

使用axis2进行WebService的开发

使用axis2进行WebService的开发ApacheAxis2是ApacheAxisSOAP项目的后继项目。

此项目是Web服务核心引擎的重要改进,目标是成为Web服务和面向服务的体系结构(Service-OrientedArchitecture,SOA)的下一代平台。

axis2WebService开发分为服务端开发与客户端开发,服务端开发为对外提供服务,客户端开发为用户调用外部接口进行业务处理。

一、下载与安装

1.下载

下载地址:

http:

//axis.apache.org/axis2/java/core/download.cgi

有以下下载列表:

BinaryDistributionzip|MD5|PGP

SourceDistributionzip|MD5|PGP

WARDistributionzip|MD5|PGP

DocumentsDistributionzip|MD5|PGP注:

axis2-1.6.2-bin.zip里有axis2的jar包。

axis2-1.6.2-docs.zip里有详细的帮助文档。

axis2-1.6.2-src.zip里是源代码。

axis2-1.6.2-war.zip里是axis的管理平台,放到tomcat可直接使用。

注:

本文用bin包进行命令行使用axis2,管理平台使用的是war包。

2.安装配置

将axis2-1.6.2-bin.zip解压到本地目录D:

\axis2-1.6.2设置环境变量。

【注:

前提需要配置java环境变量】

AXIS2_HOME设置值D:

\axis2-1.6.2

Path添加值%AXIS2_HOME%\bin二、服务端编写

1.创建服务端的java项目testAsixServer。

编写类City与类User代码如下:

[java]viewplaincopypackagecom.hsinghsu.model;publicclassCity{privateintcityCode;privateStringcityName;publicintgetCityCode(){returncityCode;}publicvoidsetCityCode(intcityCode){this.cityCode=cityCode;}publicStringgetCityName(){returncityName;}publicvoidsetCityName(StringcityName){this.cityName=cityName;}}

[java]viewplaincopypackagecom.hsinghsu.model;publicclassUser{privateintid;privateStringname;privateStringpassword;privateCitycity;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicCitygetCity(){returncity;}publicvoidsetCity(Citycity){this.city=city;}}

编写服务类UserService。

该服务类即为对外提供的服务,其中对外提供2个服务getUserById与getUserList,代码如下:

[java]viewplaincopypackagecom.hsinghsu.service;importjava.util.ArrayList;importjava.util.List;importcom.hsinghsu.model.User;publicclassUserService{publicList<User>getUserList(Useruser){List<User>list=newArrayList<User>();returnlist;}publicUsergetUserById(intid){Useruser=newUser();returnuser;}}

2.发布WebService服务

发布WebService服务方式可使用axis2管理平台发布,本文另添加使用soapUI发布WebService的测试服务。

2.1axis2管理平台发布

2.1.1部署axis2管理平台

将axis2-1.6.1-war.zip压缩包里面的axis2.war包解压到tomcat的webapps目录下,启动tomcat,访问地址http:

//127.0.0.1:

8080/axis2/,即可访问axis2的Welcome!

页面。

访问地址http:

//127.0.0.1:

8080/axis2/services/listServices另可访问服务列表。

2.1.2部署开发服务

编译服务端项目testAsixServer后,将UserService.class文件放到tomcat\webapps\axis2\WEB-INF\pojo目录中【注:

若没有pojo目录,则手动新建该目录】。

在浏览器地址栏中输入如下的URL:

http:

//127.0.0.1:

8080/axis2/services/listServices即可访问刷新后的服务列表。

【注:

POJO类不能使用package关键字声明包,若使用axis2管理平台发布,则需要修改UserService类,去掉package字段。

】【注:

发布WebService的pojo目录只是默认的,如果想在其他的目录发布WebService,可以打开axis2/WEB-INF/conf/axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:

<deployerextension=".class"directory="mydir"class="org.apache.axis2.deployment.POJODeployer"/>】访问http:

//127.0.0.1:

8080/axis2/services/UserService?

wsdl即可访问服务UserService的wsdl描述【注:

另可使用jarcvf命令将服务打成aar包后导入到axis2管理平台上使用。

】2.2使用soapUI生成WAR发布WebService测试服务2.2.1由java生成wsdl文件

运用Java2wsdl生成wsdl文件使用cmd命令,在命令行中输入:

java2wsdl-cncom.hsinghsu.service.UserService

【注:

在testAsixServer项目的classes根目录下执行】输出:

UsingAXIS2_HOME:

D:

\axis2-1.6.2

UsingJAVA_HOME:

C:

\ProgramFiles\Java\jdk1.6.0_01

log4j:

WARNNoappenderscouldbefoundforlogger(org.apache.axis2.util.Loader).

log4j:

WARNPleaseinitializethelog4jsystemproperly.结果:

生成UserService.wsdl文件2.2.2soapUI导出war包:

在soapUI导入UserService.wsdl文件。

通过soapUI生成MockService。

启动MockService,测试MockService时,在URL填写http:

//HSING-PC:

8088/mockUserServiceSoap11Binding后点击运行,查看是否有正确报文返回。

soapUI发送报文如下:

[html]viewplaincopy<soapenv:

Envelopexmlns:

soapenv="http:

//schemas.xmlsoap.org/soap/envelope/"xmlns:

ser=""><soapenv:

Header/><soapenv:

Body><ser:

getUserById><!

--Optional:

--><ser:

id>2</ser:

id></ser:

getUserById></soapenv:

Body></soapenv:

Envelope>

soapUI接收报文如下:

[html]viewplaincopy<soapenv:

Envelopexmlns:

soapenv="http:

//schemas.xmlsoap.org/soap/envelope/"xmlns:

ser=""xmlns:

xsd="<soapenv:

Header/><soapenv:

Body><ser:

getUserByIdResponse><!

--Optional:

--><ser:

return><!

--Optional:

--><xsd:

city><!

--Optional:

--><xsd:

cityCode>001</xsd:

cityCode><!

--Optional:

--><xsd:

cityName>wh</xsd:

cityName></xsd:

city><!

--Optional:

--><xsd:

id>1</xsd:

id><!

--Optional:

--><xsd:

name>hsinghsu</xsd:

name><!

--Optional:

--><xsd:

password>123456</xsd:

password></ser:

return></ser:

getUserByIdResponse></soapenv:

Body></soapenv:

Envelope>

在soapUI中导出war包,如testUser.war。

2.2.3部署war包

将war包部署到tomcat目录下。

【注:

需要修改war包里面的WEB-INF/soapui/testUser-soapui-project.xml文件引用wsdl文件的路径】

启动tomcat,访问在war所在的路径如http:

//127.0.0.1:

8080/testUser/mockUserServiceSoap11Binding?

WSDL,即可查看wsdl描述文件

【注:

可以使用soapUI测试接口,在soapUI测试中,URL中填写testUser.war的部署地址,如http:

//ip:

port/testUser/mockUserServiceSoap11Binding,点击运行,查看对应的接口是否有正确报文返回。

】三、客户端编写Axis2支持以下4种类型的客户端:

i.Block(阻塞式客户端),即传统客户端。

一旦服务被启用,客户端的应用程序将被挂起,直到operation被执行完毕(表现为收到一个response或fault),才能重新获得控制权。

这是调用WebService最简单的方式,并且这种方式适用于多数业务情形。

ii.Nonblock(非阻塞式客户端),即异步客户端。

使用Non-BlockingAPI来调用这些WebServices。

Axis2提供给用户一种基于回叫机制的non-blockingAPI,一旦服务被起用,客户端应用程序马上得到控制权,通过使用一个callback对象来获得response。

这种方式使得客户端应用程序可以很方便的同步启用多个WebService。

iii.双工(双向传输)。

以上的机制都使用单一的连接去发送请求和接收响应.这都明显在性能上落后于使用两条连接(单向或双向)进行进行请求和响应的传输.因此以上的机制都不能解决长时间运行的交易,连接将在操作还没完成就会超时.一种解决方案是使用分开的两条传输连接来传输请求和响应.我们叫这种方案为传输层异步。

iv.双工非阻塞(双向且非阻塞传输)。

注:

axis2webserviceclient端需要的jar包有:

[plain]viewplaincopyaxis2-kernel-1.6.1.jaraxis2-adb-1.6.1.jaraxiom-api-1.2.12.jarcommons-logging-1.1.1.jarwsdl4j-1.6.2.jarXmlSchema-1.4.7.jaraxiom-impl-1.2.12.jarneethi-3.0.1.jaraxis2-transport-local-1.6.1.jaraxis2-transport-http-1.6.1.jarcommons-httpclient-3.1.jarhttpcore-4.0.jarcommons-codec-1.3.jarmail-1.4.jar

1.传统客户端【阻塞式客户端的编写】

新建AsixBlockClient类,获取数据,代码如下:

[java]viewplaincopypackagecom.hsinghsu.asix.client;importorg.apache.axiom.om.OMAbstractFactory;importorg.apache.axiom.om.OMElement;importorg.apache.axiom.om.OMFactory;importorg.apache.axiom.om.OMNamespace;importorg.apache.axis2.AxisFault;importorg.apache.axis2.addressing.EndpointReference;importorg.apache.axis2.client.Options;importorg.apache.axis2.client.ServiceClient;/****Block(阻塞式客户端),即传统客户端调用WebServiceAxis2的底层API来调用WebService**@authorhsinghsu**/publicclassAsixBlockClient{privatestaticEndpointReferencetargetEPR=newEndpointReference("http:

//127.0.0.1:

8080/testUser/mockUserServiceSoap11Binding");//接口地址publicstaticvoidmain(String[]args){Optionsoptions=newOptions();options.setAction("urn:

getUserById");//调用接口方法options.setTo(targetEPR);ServiceClientsender=null;try{sender=newServiceClient();sender.setOptions(options);OMFactoryfac=OMAbstractFactory.getOMFactory();OMNamespaceomNs=fac.createOMNamespace("","");OMElementmethod=fac.createOMElement("getUserById",omNs);OMElementname=fac.createOMElement("id",omNs);//设置入参名称name.setText("1");//设置入参值method.addChild(name);method.build();System.out.println("method:

"+method.toString());//print:

<getUserByIdxmlns=""><id>1</id></getUserById>OMElementresponse=sender.sendReceive(method);System.out.println("response:

"+response);OMElementelementReturn=response.getFirstElement().getFirstElement().getFirstElement();System.out.println("cityCode:

"+elementReturn.getText());}catch(AxisFaulte){System.out.println("Error");e.printStackTrace();}}}

执行结果如下:

[plain]viewplaincopymethod:

<getUserByIdxmlns=""><id>1</id></getUserById>response:

<ser:

getUserByIdResponsexmlns:

ser=""><!

--Optional:

--><ser:

return><!

--Optional:

--><xsd:

cityxmlns:

xsd="<!

--Optional:

--><xsd:

cityCode>001</xsd:

cityCode><!

--Optional:

--><xsd:

cityName>wh</xsd:

cityName></xsd:

city><!

--Optional:

--><xsd:

idxmlns:

xsd="<!

--Optional:

--><xsd:

namexmlns:

xsd="<!

--Optional:

--><xsd:

passwordxmlns:

xsd="</ser:

return></ser:

getUserByIdResponse>cityCode:

001

2.使用RPC方法调用WebService

编写AsixRPCClient.java类,获取数据。

注:

添加User.java、City.java至项目中。

AsixRPCClient.java代码如下:

[java]viewplaincopypackagecom.hsinghsu.asix.client;importjavax.xml.namespace.QName;importorg.apache.axis2.addressing.EndpointReference;importorg.apache.axis2.client.Options;importorg.apache.axis2.rpc.client.RPCServiceClient;importcom.hsinghsu.model.User;/***使用RPC方式调用WebService**@authorhsinghsu**/publicclassAsixRPCClient{/***@paramargs*/publicstaticvoidmain(String[]args)throwsException{//使用RPC方式调用WebServiceRPCServiceClientserviceClient=newRPCServiceClient();Optionsoptions=serviceClient.getOptions();EndpointReferencetargetEPR=newEndpointReference("http:

//127.0.0.1:

8080/testUser/mockUserServiceSoap11Binding");//指定调用WebService的URLoptions.setTo(targetEPR);Object[]opAddEntryArgs=newObject[]{newInteger

(1)};//指定getGreeting方法的参数值Class[]classes=newClass[]{User.class};//指定getGreeting方法返回值的数据类型的Class对象QNameopAddEntry=newQName("","getUserById");//指定要调用的getGreeting方法及WSDL文件的命名空间Object[]objects=serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes);//RPCServiceClient类的invokeBlocking方法调用了WebServ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1