Axis2.x WebService开发
最近因为公司项目的需要,需要做接口让其它公司开发的系统来调用我们的接口获取数据,所以要开发接口,但是以前有人开发过接口通过Axis2.x 开发过接口,所以我必须也要用这种方式来开发接口,这样才能把接口发布在一起。
webservice开发有很多种方式,我这只是其中的一种开发方式,我环境搭建起来就花了好久的时间,在这里我会写出来,希望你们在我之后不会遇到这么多问题。
一、 准备工作
1、开发准备
首先需要下载axis2的相关jar包,到axis的官方网站即可获得开发的依赖包。
下载地址:http://axis.apache.org/axis2/java/core/download.cgi
现在最高的版本是1.5.4的
然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。
下载页面:http://axis.apache.org/axis2/java/core/tools/index.html
Service Archive Wizard - Eclipse Plug-in
Code Generator Wizard - Eclipse Plug-in
2、安装eclipse插件
我是用meclipse 8.5和eclipse插件org.apache.axis2.eclipse.service.plugin_1.6.2.jar,org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar
这两个jar包直接放在myeclipse的安装目录MyEclipse8.5\dropins里面,并且要加上javax.xml.bind_2.1.9.v201005080401.jar,
javax.xml.stream_1.0.1.v201004272200.jar,javax.xml_1.3.4.v201005080400.jar这几个文件可以自己去MyEclipse8.5\Common\plugins报里面去找
把这五个jar包一起放在myeclipse安装目录MyEclipse8.5\dropins里面,插件就可以使用了。
以前用1.5.2,1.3版本的插件要么显示不出来,要么到以后操作的时候就报错。
如果你的eclipse插件安装成功后,会看到如下效果:
3、分析axis2-bin文件目录结构
下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:
bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具
(这个文件很重要的,在以后插件生成客户端代码出错的情况下,可以用这里面得命令去生成,不会报错)
conf是axis2的配置文件
lib运行所要的依赖库
repository是发布过的axis服务和文件
sample是示例
webapp是web文件和jsp页面等
4、我们需要将下载下来的axis2-1.5.3-war.zip中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。
Tomcat启动后,在浏览器中输入:http://localhost:8080/axis2/你可以看到
下面用axis2的工具生成aar文件,然后完成发布WebService。
1、 点击工作空间WorkSpace,右键New选择Other
2、 然后点击Browser选择你当前的工程的classes目录
点击Next
3、 没有WSDL,选择第一项,点击Next,然后再Next一次
4. 不用设置service.xml,直接Next
5.最关键一步,填写WebService的Name,设置class路径点击Load你就可以看到当前class的方法
6、 设置aar文件的名称和保持的目录
点击Finish你可以看到提示successfully的提示。
7、刷新当前工程可以看到ManangerUserService.aar文件了
8.下面我们在浏览器中访问这个地址:http://localhost:8080/axis2/
点击Admin这个链接,可以看到要输入用户名和密码,用户名和密码在
Tomcat_Home\webapps\axis2\WEB-INF\conf下的axis2.xml中可以找到
<parameter name="userName">admin</parameter>
<parameter name="password">axis2</parameter>
9、 输入密码进入管理页面后可以看到
下面介绍下上面常用的功能
Upload Service当然是上传aar的文件,完成发布WebService的工具了
Available Service是查看当前发布的Service详细信息
Available Service Groups是Service组
Global Chains是可以用的全局的Chain
Operation Specific Chains是某个具体操作的chain
Deactivate Service 是取消某个Service
Activate Service 是将取消发布的Service再发布出去
Edit Parameters是修改WebService类的参数
10、 我们这里用Upload Service这个工具,然后选择我们刚才用axis2的工具生成aar文件。
其实这一步我们可以直接将ManagerUserService.aar文件copy到
tomcat-home\webapps\axis2\WEB-INF\services这个目录下。
11、 然后点击Available Service就可以看到ManagerUserService这个Service了
现在我们要用axis2的工具生成wsdl文件
1、点击WorkSpace,右键New选择Other。然后选择客户端代码生成工具
2、点击Next,你可以看到让你选择wsdl。选择第一个,然后点击Next
上面是根据Java class代码生成wsdl文件
3、填写你的WebService的classpath,然后选择你当前class所在工程的class目录
然后点击Add Folder选择你的工程的classes 或 bin目录,也就是你填写的class所在的目录,然后点击Test 测试是否正确。
点击Next继续下一步
4、可以看到即将发布的WebService名称和命名空间
5、继续Next,选择wsdl文件保存目录
这样services.wsdl文件就生成了
控制台wsdl生成客户端代码
用axis2的插件生成的客户端代码总是报错,可能是版本跟axis2不一致,所以我直接用wsdl2java.bat生成客户端调用
代码
控制台用wsdl转JAVA方法:
Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。
wsdl2java.bat命令可以在<Axis2安装目录>"bin目录中找到
在Windows控制台输出如下的命令行来生成调用WebService的代码:
你的axis2的目录\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client
黑窗口控制台:
C:\Users\admin>D/
D:\>cd D:\axis2-1.6.1\bin
D:\axis2-1.6.1\bin>wsdl2java -uri (写上要访问的webservices地址)/回车
-s -o stub
在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个SimpleServiceStub.java文件。
参数说明:
-url 指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。
-p 指定了生成的Java类的包名,
-o 指定了生成的一系列文件保存的根目录。
-ss 生成服务器端代码(如skeletons)
-sd 生成服务器描述文件(services.xml),要在 有-ss参数的时候才有效
-scn 用已有的代码代替skeletons
调用代码
public class RealFrDataService {
public static void main(String[] args) {
String target = "http://localhost:8080/axis2/services/RealFrDataService";
try{
RealFrDataServiceStub stub = new RealFrDataServiceStub(target);
RealFrDataServiceStub.GetStatisticsDataByWgCode object = new RealFrDataServiceStub.GetStatisticsDataByWgCode();
object.setCode("110108012023");
RealFrDataServiceStub.GetStatisticsDataByWgCodeResponse response = stub.getStatisticsDataByWgCode(object);
System.out.println(response.get_return());
}
catch(Exception ex){
ex.printStackTrace();
}
}
}