axis2 1.7.1使用教程
写在前面
本文只说Axis2的用法。
1、下载与部署
需要下载两个文件:
下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/axis2-1.7.1-war.zip,该文件是部署所用;
下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/axis2-1.7.1-bin.zip,该文件是开发所用;
解压axis2-1.7.1-war.zip会得到一个axis2.war,将之扔到tomcat之webapps目录之下,启动tomcat,war包会自动解压;
测试:http://localhost:8080/axis2,看到欢迎界面了吧,恭喜第一步成功了!
2、配置axis2
打开/axis2/WEB-INF/conf/axis2.xml配置文件,找到<parameter name="hotupdate">false</parameter>改为true;
只是为了热更新,方便调试。不配置也可以的。
3、HelloWorld
在/axis2/WEB-INF目录下,新建一个目录pojo,在该目录下新建一个java文件:
1
2
3
4
5
6
|
public class HelloWorld { public String sayHello(){ return "hello world!" ; } } |
编译之,shift,在此处打开命令行,javac HelloWorld.java, 不用解释吧?
看到多了一个HelloWorld.class文件吧,就是它!
打开浏览器,输入:http://localhost:8080/axis2/services/HelloWorld;
4、pojo目录说明
为什么是pojo目录,新建个不行么?
当然行,不过需要配置一下下,打开/axis2/WEB-INF/conf/axis2.xml配置文件,找到如下内容,新增目录
1
2
|
<deployer extension= ".class" directory= "pojo" class = "org.apache.axis2.deployment.POJODeployer" /><BR> <!--新增的目录--> <deployer extension= ".class" directory= "pojo2" class = "org.apache.axis2.deployment.POJODeployer" /> |
注意:这里面放置的类不能保护package,另外如果多个目录,service名称不能重复.
5、no package?那怎么能行!
打开eclipse,建一个java project,并建立com.ws.test.services包,在该包下创建一个类HelloService,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.ws.test.services; public class HelloService { /** * 没有返回值 * @param info */ public void send(String info) { System.out.println(info); } /** * 有返回值 * @param x * @param y * @return */ public int add( int x, int y) { return x + y; } } |
在src目录下新建META-INF文件夹,在其下建立两个文件:MANIFEST.MF和services.xml
serviecs.xml代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?xml version= "1.0" encoding= "UTF-8" ?> <service name= "HelloService" > <description>一个简单的WebService</description> <!-- 服务全类名 --> <parameter name= "ServiceClass" >com.ws.test.services.HelloService</parameter> <operation name= "send" > <!-- 信息接收器, 无返回值用:RPCInOnlyMessageReceiver--> <messageReceiver mep= "http://www.w3.org/ns/wsdl/in-only" class = "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation> <operation name= "add" > <!-- 信息接收器, 有返回值用:RPCMessageReceiver--> <messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out" class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service> |
注:\axis2-1.7.1\samples\pojo\src\META-INF目录下有services.xml例子,可以复制过来修改。
6、打包
选择包名和META-INF,export为server.jar,修改为servier.aar,扔进\webapps\axis2\WEB-INF\services目录下,重启tomcat
测试:http://localhost:8080/axis2,点击services,出现如下界面:
成功了一大步!
测试:http://localhost:8080/axis2/services/HelloService/send?info=hello,如果tomcat控制台输出hello,测试成功!
测试:http://localhost:8080/axis2/services/HelloService/add?x=1&y=4,如果返回5,测试成功!
7、如何发布多个Service呢?
在com.ws.test.services目录下新建HelloService2,代码如下:
1
2
3
4
5
6
7
|
package com.ws.test.services; public class HelloService2 { public int sub( int x, int y) { return x - y; } } |
修改services.xml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?xml version= "1.0" encoding= "UTF-8" ?> <serviceGroup> <service name= "HelloService" > <description>一个简单的WebService</description> <!-- 服务全类名 --> <parameter name= "ServiceClass" >com.ws.test.services.HelloService </parameter> <operation name= "send" > <!-- 信息接收器, 无返回值用:RPCInOnlyMessageReceiver --> <messageReceiver mep= "http://www.w3.org/ns/wsdl/in-only" class = "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation> <operation name= "add" > <!-- 信息接收器, 有返回值用:RPCInOnlyMessageReceiver --> <messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out" class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service> <service name= "HelloService2" > <description>一个简单的WebService 2 </description> <parameter name= "ServiceClass" >com.ws.test.services.HelloService2 </parameter> <operation name= "sub" > <messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out" class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service> </serviceGroup> |
重新打包,扔进\webapps\axis2\WEB-INF\services目录下;
测试:http://localhost:8080/axis2/services/HelloService2/sub?x=5&y=2,返回3,则测试成功!
8、如何在程序中调用webservice呢?
先加入jar包,jar包路径:\axis2-1.7.1\lib\*.jar
(1)直接看代码吧,这个方法比较麻烦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package com.ws.test.client; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class TestClient { public static void main(String[] args) throws AxisFault { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/HelloService" ); options.setTo(targetEPR); Object[] entryArgs = new Object[] { 4 , 2 }; //命名空间:wsdl:definitions标签targetNamespace属性 QName opName = new QName( "http://services.test.ws.com" , "add" ); //有返回值 Object result = serviceClient.invokeBlocking(opName, entryArgs, new Class[] { int . class })[ 0 ]; System.out.println(result); opName = new QName( "http://services.test.ws.com" , "send" ); //无返回值 serviceClient.invokeRobust(opName, new Object[]{ "hello world!" }); } } |
(2)使用wsdl2java
使用方法:
①先配置axis2客户端环境变量
AXIS2_HOME:D:\Program Files\axis2-1.7.1
path追加:%AXIS2_HOME%\bin
②在项目目录下,即跟src目录同级,shift进入命令行窗口,输入如下命令:
1
|
wsdl2java -uri http: //localhost:8080/axis2/services/HelloService?wsdl -p com.ws.test.stubs -s |
③进入项目F5
是不是多了一个包叫做:com.ws.test.stubs下面有给类叫做HelloServiceStub,打开看看,吓死宝宝了,好多内容,还好不用管他。
④客户端代码,直接看代码了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.ws.test.client; import java.rmi.RemoteException; import com.ws.test.stubs.HelloServiceStub; import com.ws.test.stubs.HelloServiceStub.Add; public class TestClient2 { public static void main(String[] args) throws RemoteException { HelloServiceStub stub = new HelloServiceStub(); Add add = new Add(); add.setX( 1 ); add.setY( 2 ); int result = stub.add(add).get_return(); System.out.println(result); } } |
宝宝用起来很舒服!
9、wsdl2java好强大,是不是可以转换任何的WebService啊?
当然可以了,废话少说,代码如下:
①干啥?当然运行命令了
1
|
wsdl2java -uri http: //www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl -p com.ws.test.stubs -s |
②客户端测试代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.ws.test.client; import java.rmi.RemoteException; import com.ws.test.stubs.WeatherWebServiceStub; import com.ws.test.stubs.WeatherWebServiceStub.ArrayOfString; import com.ws.test.stubs.WeatherWebServiceStub.GetSupportCity; public class TestWeather { public static void main(String[] args) throws RemoteException { WeatherWebServiceStub stub = new WeatherWebServiceStub(); GetSupportCity gsc = new GetSupportCity(); gsc.setByProvinceName( "山东" ); ArrayOfString as = stub.getSupportCity(gsc).getGetSupportCityResult(); for (String city : as.getString()) { System.out.println(city); } } } |
看控制台输出:
济南 (54823)
青岛 (54857)
淄博 (54830)
威海 (54774)
曲阜 (54918)
临沂 (54938)
烟台 (54765)
枣庄 (58024)
聊城 (54806)
济宁 (54915)
菏泽 (54906)
泰安 (54827)
日照 (54945)
东营 (54736)
德州 (54714)
滨州 (54734)
莱芜 (54828)
潍坊 (54843)
ok了,结束。
axis2 1.7.1使用教程的更多相关文章
- axis2之webservice
Axis2之webservice超详细教程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的 ...
- axis2开发webservice总结
需求环境:对接方公司提供wsdl文件,我方按照该wsdl文件开发服务端. 配置axis2开发环境,网上教程很多,不再啰嗦.环境搭好后执行wsdl2java -uri file:///C:/Users/ ...
- webservice的Axis2入门教程java版
本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...
- WebService引擎Axis2完美教程
1.http://wenku.baidu.com/link?url=O05r69TGaLmrJrjJqGz-5EASox8FhhUO6i97xoUOV2dcbh8BEnOlX2EN3nuYGE_3HE ...
- Axis2的下载和安装
Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...
- 如何使用axis2 构建 Android 服务器后端--- 工具准备与环境配置
最近一个项目要做个android端的实验室器材管理系统.小伙伴英勇地接下android端的锅,我就 负责给他写后端,最近看到axis2 这个webservice挺好用的,折腾了几天给大家分享下: 1. ...
- axis2开发实例(一)
主要参考<axis2之webservice新手超详细教程http://wenku.baidu.com/view/6eae036d011ca300a6c390a4.html> <axi ...
- WebService之Axis2(1):用POJO实现0配置的WebService
Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...
- Python之Numpy详细教程
NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...
随机推荐
- tomcat实现连接数据库
192.168.30.23mkdir /web/webapptar xf SLSaleSystem.tar.gz -C /web/webappls /web/wenbappvim /usr/loca ...
- (C/C++学习)2.C语言中文件流操作基本函数总结
函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...
- case...when...then if 用法
select case when if 的一些用法 概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让 ...
- hdu 3555数位dp基础入门题
#include<stdio.h> #define N 20 long long dp[N][3]; void init(){ long long i; dp[0][0]=1; for ...
- 如何预防SQL注入,XSS漏洞(spring,java)
SQL注入简介 SQL注入是由于程序员对用户输入的参数没有做好校验,让不法分子钻了SQL的空子, 比如:我们一个登录界面,要求用户输入用户名和密码: 用户名: ' or 1=1-- 密码: 点击登录之 ...
- LInux下实时网络流量监控工具nload教程
https://jingyan.baidu.com/article/642c9d340cbef0644a46f72a.html http://blog.csdn.net/u014171641/arti ...
- mongodb-主从复制
1 主从复制: 一个概念,在sqlserver或者说是mysql也有 2 主从复制解决了哪些问题??? 读写压力:以前是一个mongodb去承载海量的读和写,这样的话终有瓶颈的.使用一主多从, 从服务 ...
- J - Assign the task
J - Assign the task HDU - 3974 思路:一眼秒思路<(* ̄▽ ̄*)/ dfs序+线段树. 通过dfs序把树上问题转化成线段上的问题.然后用线段树解决. 错因:都 ...
- 在AIX下面查询上一次命令
在AIX下面查询上一次命令 输入 r 或者 set -o vi 用vi的操作找上一次命令: 学习了: http://blog.itpub.net/66634/viewspace-1000843/ ht ...
- mysql稳定的版本号选择及下载说明(2014-11-10)
怎样选择新稳定的版本号 mysql的版本号大概能够分为Alpha.Beta.GA. GA版即mysql官方公布的稳定版本号. 怎样在官方下载Mysql 能够通过http:// ...