写在前面

 本文只说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使用教程的更多相关文章

  1. axis2之webservice

    Axis2之webservice超详细教程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的 ...

  2. axis2开发webservice总结

    需求环境:对接方公司提供wsdl文件,我方按照该wsdl文件开发服务端. 配置axis2开发环境,网上教程很多,不再啰嗦.环境搭好后执行wsdl2java -uri file:///C:/Users/ ...

  3. webservice的Axis2入门教程java版

    本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...

  4. WebService引擎Axis2完美教程

    1.http://wenku.baidu.com/link?url=O05r69TGaLmrJrjJqGz-5EASox8FhhUO6i97xoUOV2dcbh8BEnOlX2EN3nuYGE_3HE ...

  5. Axis2的下载和安装

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  6. 如何使用axis2 构建 Android 服务器后端--- 工具准备与环境配置

    最近一个项目要做个android端的实验室器材管理系统.小伙伴英勇地接下android端的锅,我就 负责给他写后端,最近看到axis2 这个webservice挺好用的,折腾了几天给大家分享下: 1. ...

  7. axis2开发实例(一)

    主要参考<axis2之webservice新手超详细教程http://wenku.baidu.com/view/6eae036d011ca300a6c390a4.html> <axi ...

  8. WebService之Axis2(1):用POJO实现0配置的WebService

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  9. Python之Numpy详细教程

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 “Numeric Python”. 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric,即 NumPy 的前 ...

随机推荐

  1. Uoj 52. 【UR #4】元旦激光炮 神题+交互题

    Code: #include "kth.h" #include<iostream> int minn(int x,int y){return x<y?x:y;}; ...

  2. jquery判断字符串中是否存在某个的字符串

    有两种方式: 1)test 2)indexOf $(function(){ var str="sunny,woo"; var sear=new RegExp(','); if(se ...

  3. WinRTXamlToolkit在Win8.1实现统计图

    [注1]WinRTXamlToolkit是免费控件,不过很久不更新了,而且网上的资源很少.后来我发现syncfusion控件有免费的community版本,并且有详细文档,所以就转过去使用syncfu ...

  4. JavaScript向window onload添加加载函数

    有时候我们需要在页面加载事件后完成一些函数操作,对于函数比较多的情况下可以写一个统一的加载函数 .本函数来自于JavaScript DOM 编程艺术: function addLoadEvent(fu ...

  5. [bzoj3038/3211]上帝造题的七分钟2/花神游历各国_线段树

    上帝造题的七分钟2 bzoj-3038 题目大意:给定一个序列,支持:区间开方:查询区间和. 注释:$1\le n\le 10^5$,$1\le val[i] \le 10^{12}$. 想法:这题还 ...

  6. [jQuery]data-不能乱用啊

    使用jQuery easy ui做一个拖拽的功能 因为在要拖拽的元素中使用了date-options={OPTIONS}来存数据,因为没有替换{OPTIONS} jQuery貌似把我的}识别成方法的} ...

  7. 通过UrlRewriter配置MVC4伪静态

    有些项目须要设置静态.这样能够被站点收录了,提高站点的排名.内容. 假设地址后面有www.a.com/xx.html?id=1是不行,还是不能达到一些需求.怎么才干实现www.a.com/1/xx.h ...

  8. 当使用servlet输出json时,浏览器端jquery的ajax遇到parse error的问题

    在使用jquery的ajax进行请求发送并由服务端的servlet返回json格式的数据内容时,假设输出内容没有正确设置,会遇到client浏览器报告parse error的问题.这个问题的解决仅仅须 ...

  9. uva live 6827 Galaxy collision

    就是给出非常多点,要求分成两个集合,在同一个集合里的点要求随意两个之间的距离都大于5. 求一个集合.它的点数目是全部可能答案中最少的. 直接从随意一个点爆搜,把它范围内的点都丢到跟它不一样的集合里.不 ...

  10. UVA 10025(数学)

     The ? 1 ? 2 ? ... ? n = k problem  The problem Given the following formula, one can set operators ' ...