基于AXIS2的WebService开发.docx

上传人:h**** 文档编号:130728 上传时间:2018-07-09 格式:DOCX 页数:65 大小:727.87KB
下载 相关 举报
基于AXIS2的WebService开发.docx_第1页
第1页 / 共65页
基于AXIS2的WebService开发.docx_第2页
第2页 / 共65页
基于AXIS2的WebService开发.docx_第3页
第3页 / 共65页
基于AXIS2的WebService开发.docx_第4页
第4页 / 共65页
基于AXIS2的WebService开发.docx_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、前言 Axis2 是目前比较流行的 WebService 引擎。 WebService 被应用在很多不同的场景。例如,可以使用 WebService 来发布服务端 Java 类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。 WebService 还经常被使用在 SOA 中,用于 SOA 各个部分交换数据。本课程重点讲解了 Axis2 的核心功能,并提供了三个项目以使学员理解并掌握如何将 Axis2 应用于不同的场景。 本课程站在初学者角度介绍了 Axis2 的大多数常用的功能,例如,以多种方式编写和发布 WebService、 JAX-RPC、 JAX-

2、WS、复杂类型传输、 WebService 会话管理、 Axis2 模块等。本课程共分为两部分,其中第一部分为 Axis2基础知识讲解。在这部分介绍了前面所述的 Axis2 知识。第二部分介绍了三个小的项目。这三个项目的功能类似。所不同的是,它们使用了不同的技术来实现。第一个项目使用 Java Swing 技术实现了 个人信息管理( PIM)系统,这个系统可以对个人信息(如姓名、职位、电话等)进行增、删、改、查。在这些操作中,涉及到了如何使用 WebService 来传输和下载图像文件、传输查询结果( Resultset 对象)等技术难点。第二个项目使用 Struts 2.1.6(目前 Str

3、uts 2的最新版, 2009 年 1 月发布)来实现 PIM。功能与第一个 PIM 类似。只是这个系统为 Web 版。在这个项目中学员可以学习到如果将 WebService 应用在Web 程序中。该系统的主要思想是如果 Web 程序和 WebService 部署在同一台机 器上, Web 程序可以直接调用 WebService 所对应的 Java 类。当然,也可以象第一个项目一样,直接通过 HTTP SOAP 协议调用 WebService。在第二个项目中同时使用了这两种方式来实现。这两种调用方式分别封装在两组 Model 类中。可以通过配置 struts.xml 文件来提定使用哪组模型类(

4、调用方式)。第三个项目使用了 C#来实现 PIM。这个项目的目的是为了演示如何将 .net 技术与 Java 技术集成来实现一个完整的应用。一个团队要想获得成功,需要每个成员通力合作,各尽所长。而在一个项目中,也和一个团 队是一样的,没有哪一种技术适合做所有的事情,因此,需要将各个领域的杰出代表组成一个技术团队。例如, Java 适合做企业应用,也能跨平台,比较适合做服务端程序,但它在客户端( C/S)的实现上略显不足,而 .net(以 C#为代表)和 visual studio 是windows 上语言和开发工具的王者,在 GUI 上有着无法超越的优势。因此,将Java 和 .net 结合是

5、最完美的联姻。学员从这个项目中就会体会到这个优势所在。 本课程通过一套完备的 WebService 电子书教程 +20 多讲教学视频 + QQ群中老师辅导的教学服务方式的 教学方式,手把手辅导学员掌握 Axis2 的核心技术,并一步步带领学员完成这三个项目 本文来自 CSDN 博客,转载请标明出处: http:/ 一、 用 POJO 实现 0 配置的 WebService Axis2 是一套崭新的 WebService 引擎,该版本是对 Axis1.x 重新设计的产物。 Axis2 不仅支持 SOAP1.1 和 SOAP1.2,还集成了非常流行的 REST WebService,同时还支持 S

6、pring、 JSON 等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用 Axis2 开发一个不需要任何配置文件的WebService,并在客户端使用 Java 和 C#调用这个 WebService。 1.1、 Axis2 的下载和安装 读者可以从如下的网址下载 Axis2 的最新版本: http:/ws.apache.org/axis2/ 在本文使用了目前 Axis2的最新版本 1.4.1。读者可以下载如下两个 zip 包: axis2-1.4.1-bin.zip axis2-1.4.1-war.zip 其中 axis2-1.4.1-bin.zip 文件中包含了 Axis

7、2中所有的 jar文件 , axis2-1.4.1-war.zip 文件用于将 WebService 发布到 Web 容器中。 将 axis2-1.4.1-war.zip 文件解压到相应的目录,将目录中的 axis2.war文件放到 webapps 目录中(本文使用的 Tomcat 的版本是 6.x),并启动 Tomcat。 在浏览器地址栏中输入如下的 URL: http:/localhost:8080/axis2/ 如果在浏览器中显示出如图 1 所示的页面,则表示 Axis2 安装成功。 图 1 1.2、编写和发布 WebService 对于用 Java 实现的服务程序给人的印象就是需要进行

8、大量的配置,不过这一点在 Axis2 中将被终结。在 Axis2 中不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService。其中 POJO 中所有的 public 方法将被发布成 WebService 方法。 下面我们来实现一个简单的 POJO,代码如下: public class SimpleService public String getGreeting(String name) return “你好 “ + name; public int getPrice() return new java.util.Random().nextInt(1000); 在

9、SimpleService 类中有两个方法,由于这两个方法都是 public 方法,因此,它们都将作为 WebService 方法被发布。 编译 SimpleService 类后,将 SimpleService.class 文件放到 webappsaxis2WEB-INFpojo 目录中(如果没有 pojo 目录,则建立该目录)。现在我们已经成功将 SimpleService 类发布成了 WebService。在浏览器地址栏中输入如下的 URL: http:/localhost:8080/axis2/services/listServices 这时当前页面将显示所有在 Axis2 中发布的 W

10、ebService,如图 2 所示。 图 2 在浏览器地址栏中输入如下的两个 URL 来分别测试 getGreeting 和 getPrice 方法: http:/localhost:8080/axis2/services/SimpleService/getGreeting?name=bill http:/localhost:8080/axis2/services/SimpleService/getPrice 图 3 和图 4 分别显示了 getGreeting 和 getPrice 方法的测试结果。 图 3 getGreeting 方法的测试结果 图 4 getPrice 方法的测试结果 在

11、编写、发布和测试 0 配置的 WebService 时应注意如下几点: 1. POJO 类不能使用 package 关键字声明包。 2. Axis2 在默认情况下可以热发布 WebService,也就是说,将 WebService 的 .class 文件复制到 pojo 目录中时, Tomcat 不需要重新启动就可以自动发布 WebService。如果想取消 Axis2 的热发布功能,可以打开 webappsaxis2WEB-INFconfaxis2.xml,找到如下的配置代码: true 将 true 改为 false 即可。要注意的是, Axis2 在默认情况下虽然是热发布,但并不是热更新

12、,也就是说,一旦成功发布了 WebService,再想更新该 WebService,就必须重启 Tomcat。这对于开发人员调试 WebService 非常不方便,因此,在开发 WebService 时,可以将 Axis2 设为热更新。在 axis2.xml 文件中找到 false,将 false改为 true 即可。 3. 在浏览器中测试 WebService 时,如果 WebService 方法有参数, 需要使用 URL 的请求参数来指定该 WebService 方法参数的值,请求参数名与方法参数名要一致,例如,要测试 getGreeting 方法,请求参数名应为 name,如上面的 UR

13、L 所示。 4. 发布 WebService 的 pojo 目录只是默认的,如果读者想在其他的目录发布 WebService,可以打开 axis2.xml 文件,并在 元素中添加如下的子元素: 上面的配置允许在 webappsaxis2WEB-INFmy目录中发布 WebService。例如,将本例中的 SimpleService.class 复制到 my 目录中也可以成功发布(但要删除 pojo 目录中的 SimpleService.class,否则 WebService 会重名)。 1.3、用 Java 实现调用 WebService 的客户端程序 WebService 是为程序服务的,只

14、在浏览器中访问 WebService 是没有意义的。因此,在本节使用 Java 实现了一个控制台程序来调用上一节发布的 WebService。调用 WebService 的客户端代码如下: package 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; public c

15、lass RPCClient public static void main(String args) throws Exception / 使用 RPC 方式调用 WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); / 指定调用 WebService 的 URL EndpointReference targetEPR = new EndpointReference( “http:/localhost:8080/axis

16、2/services/SimpleService“); options.setTo(targetEPR); / 指定 getGreeting 方法的参数值 Object opAddEntryArgs = new Object “超人 “; / 指定 getGreeting 方法返回值的数据类型的 Class 对象 Class classes = new Class String.class; / 指定要调用的 getGreeting 方法及 WSDL 文件的命名空间 QName opAddEntry = new QName(“http:/ws.apache.org/axis2“, “getGr

17、eeting“); / 调用 getGreeting 方法并输出该方法的返回值 System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)0); / 下面是调用 getPrice 方法的代码,这些代码与调用 getGreeting 方法的代码类似 classes = new Class int.class; opAddEntry = new QName(“http:/ws.apache.org/axis2“, “getPrice“); System.out.println(servic

18、eClient.invokeBlocking(opAddEntry, new Object, classes)0); 运行上面的程序后,将在控制台输出如下的信息: 你好 超人 443 在编写客户端代码时应注意如下几点: 1. 客户端代码需要引用很多 Axis2 的 jar 包,如果读者不太清楚要引用哪个jar 包,可以在 Eclipse 的工程中引用 Axis2 发行包的 lib 目录中的所有 jar 包。 2. 在本例中使用了 RPCServiceClient类的 invokeBlocking方法调用了 WebService 中的方法。 invokeBlocking 方法有三个参数,其中第一

19、个参数的类型是 QName 对象,表示要调用的方法名;第二个参数表示要调用的 WebService 方法的参数值,参数类型为 Object;第三个参数表示 WebService 方法的返回值类型的 Class 对象,参数类型为 Class。当方法没有参数时, invokeBlocking 方法的第二个参数值不能是 null,而要使用 new Object。 3. 如果被调用的 WebService 方法没有返回值,应使用 RPCServiceClient 类的 invokeRobust 方法,该方法 只有两个参数,它们的含义与 invokeBlocking 方法的前两个参数的含义相同。 4.

20、在创建 QName 对象时, QName 类的构造方法的第一个参数表示 WSDL 文件的命名空间名,也就是 元素的 targetNamespace属性值,下面是 SimpleService 类生成的 WSDL 文件的代码片段: 1.4、用 wsdl2java简化客户端的编写 也许有很多读者会说“有没有搞错啊,只调用两个 WebService 方法用要写这么多代码,太麻烦了”。 不过幸好 Axis2 提供了一个 wsdl2java.bat 命令可以根据 WSDL 文件自动产生调用 WebService 的代码。 wsdl2java.bat 命令可以在 “bin 目录中找到。在使用 wsdl2ja

21、va.bat 命令之前需要设置 AXIS2_HOME 环境变量,该变量值是 。 在 Windows 控制台输出如下的命令行来生成调用 WebService 的代码: %AXIS2_HOME%binwsdl2java -uri http:/localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub 其中 -url 参数指定了 wsdl 文件的路径,可以是本地路径,也可以是网络路径。 -p 参数指定了生成的 Java 类的包名, -o 参数指定了生成的一系列文件保存的根目录。在执行完上面的命令 后,读者就会发现在当前目

22、录下多了个 stub目录,在 .“stub“src“client 目录可以找到一个 SimpleServiceStub.java 文件,该文件复杂调用 WebService,读者可以在程序中直接使用这个类,代码如下: package client; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceCl

23、ient; public class StubClient public static void main(String args) throws Exception SimpleServiceStub stub = new SimpleServiceStub(); SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting(); gg.setName(“比尔 “); System.out.println( stub.getGreeting(gg).get_return(); System.out.println(stub.getPrice().get_return(); 上面的代码大大简化了调用 WebService 的步骤,并使代码更加简洁。但要注意的是, wsdl2java.bat 命令生成的 Stub 类将 WebService 方法的参数都封装在了相应的类中,类名为方法名,例如, getGreeting 方法的参数都封装

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。