axis2实现webservice服务

axis2实现webservice服务

采用java1.8, axis2为1.7.8

服务端实现

服务端采用先实现java代码,然后使用工具java2wsdl产生wsdl文件,之后
再通过wsdl2java产生服务端代码。

public class MyServerImpl implements MyServer {
    @Override
    public String sayHi(String name) {
        return "Hello " + name;
    }
}

interface部分省略。

java2wsdl产生wsdl文件

上面的代码,需要编译,使用idea编译后如下图:
这里写图片描述

打开cmd,进入out/production/AxisDemo2目录
执行命令java2wsdl

wsdl2java -cp . -cn com.demo.ws.server.MyServerImpl

如图
这里写图片描述

之后会在当前目录产生MyServerImpl.wsdl文件。

wsdl2java产生服务端代码

切换命令行到工程目录下
使用命令

wsdl2java -ssi -ss -sd -a -g -t -uri ./out/production/AxisDemo2/MyServerImpl.wsdl

-a 是产生异步调用
-t 产生测试代码,参照接口调用编写客户端代码
-ssi 实现接口类
-ss 实现服务端代码
-sd 产生服务描述文件 默认文件名 services.xml
-g 会产生客户端代码

运行后,会产生src,resources,test三个文件夹,以及ant脚本build.xml文件如下:
这里写图片描述

实现webservice代码逻辑

实现MyServerImplSkeleton类中的方法,步骤大致如下:
1. 删除默认的throw new Exception
2. 获取入参取值
3. 实现业务逻辑
4. 初始化返回对象
5. 给返回对象赋值
6. 返回

代码如下:

    public com.demo.ws.server.SayHiResponse sayHi(
        com.demo.ws.server.SayHi sayHi0) {
        //TODO : fill this with the necessary business logic
//        throw new java.lang.UnsupportedOperationException("Please implement " +
//            this.getClass().getName() + "#sayHi");
        System.out.println("invoke sayHi " + sayHi0.getName());
        SayHiResponse resp = new SayHiResponse();
        resp.set_return("hello " + sayHi0.getName());
        return resp;
    }

执行ant命令,得到MyServerImpl.aar包。
执行 ant start.server,可以运行,如下图:
这里写图片描述

可以通过页面访问 http://127.0.0.1:8080/axis2/services/ 看到服务已经启动。

客户端实现

上面wsdl2java添加了-g已经产生了客户端代码,可以直接编写逻辑代码。

  1. 初始化Stub对象
  2. 初始化入参对象
  3. 给入参对象赋值,调用各个 setXXX方法
  4. 使用stub对象实现远程调用

通过页面查看wsdl时的url路径,作为stub初始化参数。
客户端代码如下:

public class Client {
    String uri = "http://127.0.0.1:8080/axis2/services/MyServerImpl?wsdl";
    MyServerImplStub stub = null;

    Client() throws AxisFault {
        stub = new MyServerImplStub(this.uri);
    }

    public void sayHi(String name) throws RemoteException {
        SayHi sayHi = new SayHi();
        sayHi.setName(name);
        stub.startsayHi(sayHi, new MyServerImplHandler());
    }

    public static void main(String[] args) {
        try {
            Client c = new Client();
            c.sayHi("Robin");
            Thread.sleep(1000);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

由于采用的异步接口,需要实现回调处理返回的结果:

public class MyServerImplHandler extends MyServerImplCallbackHandler {
    @Override
    public void receiveResultsayHi(SayHiResponse result) {
        super.receiveResultsayHi(result);
        System.out.println("sayHi resp: " + result.get_return());
    }

    @Override
    public void receiveErrorsayHi(Exception e) {
        super.receiveErrorsayHi(e);
        System.out.println("err call sayHi " + e);
    }
}

到这里,可以使用ant jar.client编译客户端代码了。
如果需要在idea中运行,需要添加axis中的lib库,
\axis2-1.7.8\webapp\WEB-INF\lib\
\axis2-1.7.8\lib\

运行client输出如下:
这里写图片描述
服务器输出如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值