《axis2之webservice新手超详细教程.docx》由会员分享,可在线阅读,更多相关《axis2之webservice新手超详细教程.docx(14页珍藏版)》请在三一办公上搜索。
1、axis2之webservice新手超详细教程AXIS2之WEBSERVICE新手超详细教程 -尚明 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术,本教程是主要阐述如何构建一个基本的Axis2 webservice应用,里面的许多环节高手可直接略过,本教程完全针对新手。 一、 环境安装 安装myeclipse 下载地址: 安装mysql 下载地址: 安装mysql-workbench(mysql可视化工具) 下载地
2、址: 安装tomcat 下载地址: 下载Axis2服务包 下载地址: 下载Axis2开发插件包 下载地址: 安装jdk 下载地址: 二、 环境配置 1) Java环境配置 a) 设置JAVA_HOME 图1. 图2 设置JAVA_HOME= D:Program FilesJavajdk1.6.0_10 * D:Program FilesJavajdk1.6.0_10为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写,注意环境变量最后面不能加分号,D:Program FilesJavajdk1.6.0_10;这么写是错误的。 b) 设置CLASSPATH 图1 设置CLASSPATH=
3、.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar * 要加.表示当前路径 c) 设置path 设置path=%JAVA_HOME%bin;%JAVA_HOME%jrebin 2) tomcat环境配置 a) 设置CATALINA_HOME CATALINA_HOME=F:apache-tomcat-6.0.30 * F:apache-tomcat-6.0.30为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写。 b) 测试Axis2服务包 将axis2服务包放入F:apache-tomcat-6.0.30webapps下 点击F:apache-tomca
4、t-6.0.30bin下的startup.bat文件 在浏览器中输入 http:/localhost:8080/axis2/ 若出现图中所示页面,那么说明axis2的服务包已经发布成功了; 在F:apache-tomcat-6.0.30webapps目录下会自动生成一个axis2文件夹,这个留待后面的说明中一并叙述,下面继续配置。 3) myeclipse环境配置 a) 配置axis2插件包 将axis2插件包下的Axis2_Codegen_Wizard_1.3.0和Axis2_Service_Archiver_1.3.0文件夹拷贝至Myeclipse8.5dropins 目录下 点击File
5、NewOther 若出现图中2个高亮显示的插件名,那么说明Axis2开发插件已经安装成功。 b) myeclipse下的tomcat配置 点击WindowPreferences 点击MyEclipseServersTomcat, 选择Configure Tomcat 6.x 按照图中所示配置tomcat c) myeclipse下的jre配置 点击JavaInstalledJREs,点击Search按钮,选择D:Program FilesJavajdk1.6.0_10路径 如图中所示进行配置,点击OK 4) Mysql数据配置 a) 数据库安装配置 实例配置时,笔者选择的是服务器。 服务器字符
6、集选择的是utf-8 数据库连接设置为: 用户名:root 密码:123456 b) 测试数据库建立 笔者采用的是可视化工具建库 打开mysql-workbench 点击图中标注的按钮,新建一个库 新建库名为webservice 新建student表,建表语句如下 DROP TABLE IF EXISTS student; CREATE TABLE student ( id int(11) NOT NULL AUTO_INCREMENT, number int(11) DEFAULT NULL, name varchar(45) DEFAULT NULL, tel varchar(45) DE
7、FAULT NULL, address varchar(45) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; LOCK TABLES student WRITE; INSERT INTO student VALUES (1,1,小明,119,南京),(2,2,小郭,110,西藏),(3,NULL,坤哥,117,朝鲜); UNLOCK TABLES; 双击左侧webservice库名,将其设为默认库,默认库的名字会加粗显示,如果不设置默认库,会影响下面的数据导入。 将建表
8、语句复制进来,执行; 数据导入成功。 三、 正式开发 1) 服务端开发 a) 工程建立 打开myeclipse 点击NewWeb Project新建一个Web工程 新建工程名为myservice,一直默认执行。 右键点击工程,右键菜单里选择Properties,将工程编码设置为UTF-8 b) 编写mysql数据库访问功能模块 将mysql的连接驱动包拷贝至WebRootWEB-INFlib下 在src目录下新建一个database包,分别录入以下4个类,因为牵涉到jdbc封装类的开发,这里就不详细阐述,仅贴出源代码。 (一) ConnectionFactory.java (连接工厂类) pa
9、ckage database; import java.sql.Connection; import java.sql.DriverManager; import java.util.ResourceBundle; /* 类名:ConnectionFactory * 作用:产生数据库连接对象 * 属性: * 方法:Connection getConnection * 作用:返回数据库连接对象 * 参数:无 * 返回:数据库连接对象 * 其它:返回的aConnection不会自动提交JDBC事务 * 创建人:陶尚明 * */ public abstract class ConnectionFac
10、tory /* 数据库系统的属性文件名: */ private static final String propertiesFileName = using_which_dbms; /* 获取Connection对象 * * return Connection对象 * throws Exception SqlException异常 */ static synchronized public Connection getConnection throws Exception String dbSystem=null; Connection aConnection; ResourceBundle
11、db = ResourceBundle.getBundle(dbsystem); /读取配置文件 dbSystem=db.getString(propertiesFileName); ResourceBundle rb = ResourceBundle.getBundle(dbSystem); /读取配置文件 Class.forName(rb.getString(database.driver).newInstance; aConnection = DriverManager.getConnection(rb.getString(database.url),rb.getString(datab
12、ase.username),rb.getString(database.password); /创建aConnection对象 aConnection.setAutoCommit(false); /设置不自动提交事务 return aConnection; /返回aConnection对象 /* 当前使用的数据库系统名称 * * param echoable 如果启用回显将在控制台输出描述当前数据库系统的信息 * return dbSystem 数据库系统名称 */ public static String getCurrentDBMS(boolean echoable) String dbS
13、ystem=null; ResourceBundle rb = ResourceBundle.getBundle(dbsystem); /读取配置文件 dbSystem=rb.getString(propertiesFileName); if (echoable)System.out.println(the database system what you using are +dbSystem); return dbSystem; (二) IOperationCore.java 在src目录下新建一个entity包,下面有一个TestService类 TestService.java pac
14、kage service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import database.DBOperationAdapter; import entity.Student; /* * WebService测试类 */ public class TestService /返回学生列表信息 public Student queryStudents DBOperationAdapter Student st = n
15、ull; List retList = new ArrayList; try ResultSet rs=dbtools.executeQuery(select * while(rs.next) e.printStackTrace; st = new Student; st.setId(rs.getInt(1);/设置学生ID st.setNumber(rs.getInt(2);/设置学生学号 st.setName(rs.getString(3);/设置学生姓名 st.setTel(rs.getString(4);/设置学生电话 st.setAddress(rs.getString(5);/设置
16、学生 retList.add(st); dbtools=DBOperationAdapter.getInstance; from student); 住址 catch (SQLException e) return retList.toArray(new Student0); /测试欢迎方法 public String getGreeting(String name) return 你好+name; 这个类是专门用来发布服务的,对外开放了2个接口方法:queryStudents和getGreeting方法, 其中特别注意queryStudents方法返回值是自定义对象类型的对象数组,因为web
17、service不支持 复杂的集合类传递,譬如list和map,需要转化为数组类型或者axis2里的axiom对象模型。这里是转化为 数组类型,axiom对象模型感兴趣的同学可搜索资料进一步学习,这里篇幅所限,不再进行赘述。 d) 发布服务 在左侧视图点击鼠标右键,选择NewOther 选择Axis2 Service Archiver 打包编译文件选择myservice工程下myserviceWebRootWEB-INFclasses目录,记得红色标记处的勾选取消掉。 略过wsdl文件选择 将myserviceWebRootWEB-INFlib 目录下的mysql-connector-java-
18、5.1.7-bin.jar文件 一并打包进来,否则服务无法正常访问mysql数据库 自动设置service.xml配置文件 填写需要发布的webservice名称以及对外开放的服务类名称,服务类名称前面要带包名, 勾选Search declared method only,可以在下面的列表框中看见我们对外发布的方法名。 将打好的aar包发布至tomcat的webappsaxis2WEB-INFservices下 点击Run Server启动Tomcat服务 在浏览器中输入:http:/localhost:8080/axis2/services/listServices 出现如上图所示页面,红色
19、标注的就是我们自己发布的服务, 点击MyService链接 显示发布服务的wsdl文件 浏览器中输入:http:/localhost:8080/axis2/services/MyService/getGreeting?name=guoxingquan 调用getGreeting方法,并传入一个 字符参数,返回欢迎语。 浏览器中输入:http:/localhost:8080/axis2/services/MyService/queryStudents 调用queryStudents方法,从数据库中查询学生列表信息 2) 客户端开发 客户端开发使用了一个struts2工程,struts2工程如何建
20、立不再赘述,我们直接导入myclient工程 源代码下载地址请参考教程的最后部分的附件一览。 导入myclient工程 上图中高亮显示的几个文件是需要重点说明的 a) Wsdl文件生成 在左侧视图中点击NewOther,选择上图所示高亮部分选项 如上图选择 填入之前我们服务端开放的类名,包括包路径,点击Add Folder,将服务端工程的编译文件输出文件夹 加入进来,点击Test Class Loading,继续下一步 注意我们之前发布的服务名称为MyService,请填写正确,继续下一步 继续下一步,完毕 b) 根据Wsdl文件生成客户端用户存根 在左侧视图中点击NewOther,选择上图所
21、示高亮部分选项 继续下一步 选择我们刚才生成wsdl文件,注意路径正确 注意红色部分,自动生成的代码会直接放在service包下 如上图进行选择 直接下一步,配置完毕 自动生成的代码为MyServiceCallbackHandler.java和MyServiceStub.java,其中我们这个工程里用到的只有 MyServiceStub.java,这个是根据服务器端在客户端生成的存根代码,自动封装了一系列远程调用配置,以及 对象类型以及方法的转换,大大节约了开发人员的工作量;MyServiceCallbackHandler.java主要牵涉到一系列回调, 感兴趣的同学可以进一步研究,这里不再进
22、行说明。 c) 业务调用代码 FindstudentsAction.java package com; import java.rmi.RemoteException; import service.MyServiceStub; import service.MyServiceStub.Student; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class FindstudentsAction extends ActionSupport /
23、设置远程服务调用地址 String target = public String execute throws Exception http:/127.0.0.1:8080/axis2/services/MyService; try /根据地址构造用户存根 MyServiceStub stub = new MyServiceStub(target); /调用查询学生列表方法 MyServiceStub.QueryStudentsResponse qsr = stub.queryStudents; /返回学生类型对象数组 Student sts = qsr.get_return; /将数组输出至
24、前台页面 ActionContext.getContext.getSession.put(sts, sts); d) 运行代码 return SUCCESS; catch (RemoteException e) e.printStackTrace; catch (Exception e) e.printStackTrace; 选择Add Deployment发布服务 选择myclient来进行发布 点击Run Server来启动服务 在浏览器中输入:http:/localhost:8080/myclient/ 点击学生 客户端调用学生查询方法成功。 四、 附件一览 webservice源代码下载地址: