使用Apache Axis2引擎发布基于Java语言
的WebService并跨平台调用实例
一、 配置ApacheAxis2Web Service引擎
下载组件和插件
需要的四个组件,可以在http://axis.apache.org/axis2/java/core/index.html官方网站中下载到。
axis2-1.6.4-bin.zip和axis2-1.6.4-war.zip包是Axis2的必备组件;
axis2-eclipse-codegen-plugin-1.6.4.zip包是Eclipse中适用于Axis的插件,可以方便地将WebService代码生成wsdl文件以及解析wsdl文件生成客户端Java代码文件;
axis2-eclipse-service-plugin-1.6.4.zip包是Eclipse中适用于Axis的插件,可以方便地将WebService代码转换为后缀名为.arr文件。
安装插件
将axis2-eclipse-codegen-plugin-1.6.4.zip和axis2-eclipse-service-plugin-1.6.4.zip包中的jar插件复制到MyEclipse安装目录下的dropins目录下,重启MyEclipse。
部署axis2组件
将axis2-1.6.4-war.zip包中的war文件复制到Tomcat安装目录下的webapps目录下。
启动Tomcat,使用浏览器访问http://localhost:8080/axis2
出现此页面即表示Axis2已经配置成功。
二、 创建并发布WebService
创建Web Service
建立Java Web项目并建立一个服务类。
服务类代码如下:
package axis2.service;
import java.util.ArrayList;
import java.util.List;
/**
* 服务类
*
*@author SteveJrong
*
*/
public class AxisWB {
/**
* 获取每个组里的全部人员的姓名
*
* @return
*/
publicList<String> getPeoplesOfGroup() {
List<String>list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("小花");
returnlist;
}
/**
* 根据人员姓名获取人员工号
*
* @param name
* @return
*/
publicInteger getSNByPeopleName(String name) {
IntegerSN = -1;
switch(name) {
case"张三":
SN= 1;
break;
case"李四":
SN= 2;
break;
case"王五":
SN= 3;
break;
case"赵六":
SN= 4;
break;
case"小花":
SN= 5;
break;
default:
SN= 0;
break;
}
returnSN;
}
}
将服务代码打包成arr文件
新建Axis2 Service Archiver类型的项目
配置Class File Location的位置为当前建立项目的WEB-INF/classes目录下,且不要勾选“Include .class files only”选项。
设置跳过WSDL文件的添加。
这里暂时不需要添加JAR包,直接下一步。
采用自动生成服务的XML文件的方式。
设置自动生成的XML文件中的属性,这里Service Name是对外提供的服务名称,而Class Name则是刚才写好的服务类的类名(全限定路径)。
这里要设置文件的输出路径。
Output file location的位置一定要设置为asix2组件的位置,因为要基于这个位置来发布服务的。
Output file name则是要输出的文件名称。
这里我把输出文件的名称设置为了people_service
提示自动生成成功。
转到Tomcat目录下的asix2的WEB-INF/services目录下查看,生成了后缀名为arr的people_service文件。
测试:
输入http://localhost:8080/axis2/services/listServices查看刚才新建的Web Service。
点击刚才创建的Web Service,显示服务页面服务正常发布且地址栏显示http://localhost:8080/axis2/services/AxisService?wsdl
三、 测试WebService
生成客户端文件(用于在Java中测试,C#调用非必需)
新建一个Axis2 Code Generator项目。
这里选择“GenerateJava source code from a WSDL file”(根据WSDL生成webservice客户端的java代码)。
这里设置服务发布的WSDL路径。
这里保持默认并继续。
这里设置自动生成的代码要生成到哪一位置。
第一个选项是生成到项目中的某一位置;
第二个选项是生成到硬盘的某一位置。
为了好找一些,我选择生成到桌面额一个文件夹中便于查找和使用。
提示生成成功。
生成的文件:
根目录下的build.xml文件
Service下生成的Java代码文件。
现在需要将这些代码文件和build.xml放入到测试项目中。
新建一个Java Web项目作为客户端项目进行测试,并将刚才自动生成的代码和XML文件一并拷到项目中来。
Java代码报错时需要将最开始下载的axis2-1.6.4-bin.zip包中的lib目录下的所有jar包导入到项目下。
编写测试类:
package axisservice.test;
import java.rmi.RemoteException;
import axis2.service.AxisService;
import axis2.service.AxisServiceStub;
import axis2.service.GetPeoplesOfGroup;
importaxis2.service.GetPeoplesOfGroupResponse;
public class Test {
/**
* 测试Axis服务
*
* @throws RemoteException
*/
publicstatic void main(String[] args) throws RemoteException {
//创建服务客户端
AxisServiceservice = new AxisServiceStub();
//创建服务实例
GetPeoplesOfGroupgetPeoplesOfGroup = new GetPeoplesOfGroup();
//根据服务实例创建回发实例
GetPeoplesOfGroupResponsepeoplesOfGroupResponse = service
.getPeoplesOfGroup(getPeoplesOfGroup);
//循环输出结果
for(String people : peoplesOfGroupResponse.get_return()) {
System.out.print(people+ "、");
}
}
}
Java中的执行结果:
四、 在VisualStudio中引用基于Java平台的 Web Service
建立控制台应用程序。
添加服务引用。
在“地址”文本框中填写wsdl服务发布地址,点击“转到”,即可查看到当前使用Axis2发布的Web Service,他共有两个方法。
已经添加好了对服务的引用。
编写C#代码调用服务并返回结果。
出现了两个终结点,则必须要指定从哪一个终结点获取。