ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:18.86KB ,
资源ID:11204038      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11204038.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用axis2进行WebService的开发.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

使用axis2进行WebService的开发.docx

1、使用axis2进行WebService的开发使用axis2进行WebService的开发 使用axis2进行WebService的开发Apache Axis2 是 Apache Axis SOAP 项目的后继项目。此项目是 Web 服务核心引擎的重要改进,目标是成为 Web 服务和面向服务的体系结构(Service-Oriented Architecture,SOA)的下一代平台。axis2 WebService开发分为服务端开发与客户端开发,服务端开发为对外提供服务,客户端开发为用户调用外部接口进行业务处理。一、下载与安装1.下载下载地址:http:/axis.apache.org/axis

2、2/java/core/download.cgi有以下下载列表:Binary Distribution zip | MD5 | PGP Source Distribution zip | MD5 | PGP WAR Distribution zip | MD5 | PGP Documents Distribution zip | 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的管理平台,放到tom

3、cat可直接使用。注:本文用bin包进行命令行使用axis2,管理平台使用的是war包。2.安装配置将axis2-1.6.2-bin.zip解压到本地目录D:axis2-1.6.2设置环境变量。【注:前提需要配置java环境变量】AXIS2_HOME 设置值 D:axis2-1.6.2Path 添加值 %AXIS2_HOME%bin二、服务端编写1.创建服务端的java项目testAsixServer。编写类City与类User代码如下:java view plain copy package com.hsinghsu.model; public class City private int

4、cityCode; private String cityName; public int getCityCode() return cityCode; public void setCityCode(int cityCode) this.cityCode = cityCode; public String getCityName() return cityName; public void setCityName(String cityName) this.cityName = cityName; java view plain copy package com.hsinghsu.model

5、; public class User private int id; private String name; private String password; private City city; public int getId() return id; public void setId(int id) this.id = id; public String getName() return name; public void setName(String name) this.name = name; public String getPassword() return passwo

6、rd; public void setPassword(String password) this.password = password; public City getCity() return city; public void setCity(City city) this.city = city; 编写服务类UserService。该服务类即为对外提供的服务,其中对外提供2个服务getUserById与getUserList,代码如下:java view plain copy package com.hsinghsu.service; import java.util.ArrayLi

7、st; import java.util.List; import com.hsinghsu.model.User; public class UserService public List<User> getUserList(User user) List<User> list = new ArrayList<User>(); return list; public User getUserById(int id) User user = new User(); return user; 2.发布WebService服务发布WebService服务方式可使

8、用axis2管理平台发布,本文另添加使用soapUI发布WebService的测试服务。2.1 axis2管理平台发布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后,将UserSe

9、rvice.class文件放到tomcatwebappsaxis2WEB-INFpojo目录中【注:若没有pojo目录,则手动新建该目录】。在浏览器地址栏中输入如下的URL:http:/127.0.0.1:8080/axis2/services/listServices 即可访问刷新后的服务列表。【注:POJO类不能使用package关键字声明包,若使用axis2管理平台发布,则需要修改UserService类,去掉package字段。】【注:发布WebService的pojo目录只是默认的,如果想在其他的目录发布WebService,可以打开axis2/WEB-INF/conf/axis2.

10、xml文件,并在<axisconfig>元素中添加如下的子元素:<deployer extension=.class directory=mydir class=org.apache.axis2.deployment.POJODeployer/>】访问 http:/127.0.0.1:8080/axis2/services/UserService?wsdl 即可访问服务UserService的wsdl描述【注:另可使用jar cvf命令将服务打成aar包后导入到axis2管理平台上使用。】2.2 使用soapUI生成WAR发布WebService测试服务2.2.1 由j

11、ava生成wsdl文件运用Java2wsdl生成wsdl文件使用cmd命令,在命令行中输入:java2wsdl -cn com.hsinghsu.service.UserService【注:在testAsixServer项目的classes根目录下执行】输出:Using AXIS2_HOME: D:axis2-1.6.2Using JAVA_HOME: C:Program FilesJavajdk1.6.0_01log4j:WARN No appenders could be found for logger (org.apache.axis2.util.Loader).log4j:WARN

12、Please initialize the log4j system properly.结果:生成UserService.wsdl文件2.2.2 soapUI导出war包:在soapUI导入UserService.wsdl文件。通过soapUI生成MockService。启动MockService,测试MockService时,在URL填写http:/HSING-PC:8088/mockUserServiceSoap11Binding 后点击运行,查看是否有正确报文返回。soapUI发送报文如下:html view plain copy <soapenv:Envelope xmlns:s

13、oapenv=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 view plain copy <soape

14、nv:Envelope xmlns: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:cit

15、yCode> <!-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> <

16、;/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 ,即可查看ws

17、dl描述文件【注:可以使用soapUI测试接口,在soapUI测试中,URL中填写testUser.war的部署地址,如http:/ip:port/testUser/mockUserServiceSoap11Binding ,点击运行,查看对应的接口是否有正确报文返回。】三、客户端编写Axis2支持以下4种类型的客户端:i. Block(阻塞式客户端),即传统客户端。一旦服务被启用,客户端的应用程序将被挂起,直到operation被执行完毕(表现为收到一个response或fault),才能重新获得控制权。这是调用Web Service最简单的方式,并且这种方式适用于多数业务情形。ii. No

18、n block(非阻塞式客户端),即异步客户端。使用Non-Blocking API来调用这些Web Services。Axis2提供给用户一种基于回叫机制的non-blocking API,一旦服务被起用,客户端应用程序马上得到控制权,通过使用一个callback对象来获得response。这种方式使得客户端应用程序可以很方便的同步启用多个Web Service。iii.双工(双向传输)。以上的机制都使用单一的连接去发送请求和接收响应.这都明显在性能上落后于使用两条连接(单向或双向)进行进行请求和响应的传输 . 因此以上的机制都不能解决长时间运行的交易, 连接将在操作还没完成就会超时. 一种

19、解决方案是使用分开的两条传输连接来传输请求和响应 . 我们叫这种方案为传输层异步。iv. 双工非阻塞(双向且非阻塞传输)。注:axis2 webservice client端需要的jar包有:plain view plain copy axis2-kernel-1.6.1.jar axis2-adb-1.6.1.jar axiom-api-1.2.12.jar commons-logging-1.1.1.jar wsdl4j-1.6.2.jar XmlSchema-1.4.7.jar axiom-impl-1.2.12.jar neethi-3.0.1.jar axis2-transport-

20、local-1.6.1.jar axis2-transport-http-1.6.1.jar commons-httpclient-3.1.jar httpcore-4.0.jar commons-codec-1.3.jar mail-1.4.jar 1.传统客户端【阻塞式客户端的编写】新建AsixBlockClient类,获取数据,代码如下:java view plain copy package com.hsinghsu.asix.client; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om

21、.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; /* * * Block(阻塞式客户端),即传统客户端调用WebSer

22、vice Axis2的底层API来调用WebService * * author hsinghsu * */ public class AsixBlockClient private static EndpointReference targetEPR = new EndpointReference( http:/127.0.0.1:8080/testUser/mockUserServiceSoap11Binding);/接口地址 public static void main(String args) Options options = new Options(); options.setA

23、ction(urn:getUserById);/调用接口方法 options.setTo(targetEPR); ServiceClient sender = null; try sender = new ServiceClient(); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace( , ); OMElement method = fac.createOMElement(getUserById, omN

24、s); OMElement name = fac.createOMElement(id, omNs);/设置入参名称 name.setText(1);/设置入参值 method.addChild(name); method.build(); System.out.println(method: + method.toString();/ print:<getUserById xmlns=><id>1</id></getUserById> OMElement response = sender.sendReceive(method); System

25、.out.println(response: + response); OMElement elementReturn = response.getFirstElement().getFirstElement().getFirstElement(); System.out.println(cityCode:+elementReturn.getText(); catch (AxisFault e) System.out.println(Error); e.printStackTrace(); 执行结果如下:plain view plain copy method:<getUserById

26、xmlns=><id>1</id></getUserById> response:<ser:getUserByIdResponse xmlns:ser=> <!-Optional:-> <ser:return> <!-Optional:-> <xsd:city xmlns:xsd= <!-Optional:-> <xsd:cityCode>001</xsd:cityCode> <!-Optional:-> <xsd:cityName>wh&

27、lt;/xsd:cityName> </xsd:city> <!-Optional:-> <xsd:id xmlns:xsd= <!-Optional:-> <xsd:name xmlns:xsd= <!-Optional:-> <xsd:password xmlns:xsd= </ser:return> </ser:getUserByIdResponse> cityCode:001 2.使用RPC方法调用WebService编写AsixRPCClient.java类,获取数据。注:添加User.j

28、ava、City.java至项目中。AsixRPCClient.java代码如下:java view plain copy package com.hsinghsu.asix.client; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; import com.hsinghsu.mod

29、el.User; /* * 使用RPC方式调用WebService * * author hsinghsu * */ public class AsixRPCClient /* * param args */ public static void main(String args) throws Exception / 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReferenc

30、e targetEPR = new EndpointReference( http:/127.0.0.1:8080/testUser/mockUserServiceSoap11Binding);/ 指定调用WebService的URL options.setTo(targetEPR); Object opAddEntryArgs = new Objectnew Integer(1);/ 指定getGreeting方法的参数值 Class classes = new ClassUser.class;/ 指定getGreeting方法返回值的数据类型的Class对象 QName opAddEntry = new QName(, getUserById);/ 指定要调用的getGreeting方法及WSDL文件的命名空间 Object objects = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);/ RPCServiceClient类的invokeBlocking方法调用了WebServ

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

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