配置与实现简单的基于Axis的Web Service

来源:互联网 发布:c语言视频谁讲的好 编辑:程序博客网 时间:2024/05/21 11:10

最近学习一些webService方面的东西,一步一步入手。

 

1.      配置tomcatSOAP引擎

下载axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip,分别解压。

axis2-1.4.1-war.zip解压出来的文件夹中有一个axis2.war,把它复制到“<tomcat安装目录>/webapps/”目录下,启动Tomcat,即可看到在“<tomcat安装目录>/webapps/”目录下有个axis2的文件夹

在浏览器的地址栏中,输入http://localhost:8080/axis2/,验证axis2安装成功。

 

  

2.      简单的Web service程序在Axis2中发布

简单的POJO,代码如下:

public class MyService {

    public String getHello()

    {

       return "hello world";

    }

    public String getName(String name)

    {

       return "Hello "+name;

    }

    public int getPlus(int a, int b)

    {

       return a+b;

    }

}

把编译之后的MyService.class放到

<Tomcat安装目录>/webapps/axis2/WEB-INF/pojo下,浏览器输入http://localhost:8080/axis2/services/listServices,显示已发布的服务。

浏览器地址栏输入:http://localhost:8080/axis2/services/MyService/getHello

可显示相关xml格式的返回内容。

 

浏览器地址栏输入:

http://localhost:8080/axis2/services/MyService/getName?name=bill

可显示相关xml格式的返回内容。

 

 

浏览器地址栏输入:

http://localhost:8080/axis2/services/MyService/getPlus?a=1&b=2

可显示相关xml格式的返回内容。

 

 

说明服务发布成功且可访问。

 

3.      编写程序利用SOAP调用web service

编写MyRPCClient类作为访问的客户端,使用RPC方式(RPCServiceClient)调用WebService,在RPC中指定WebServiceURL,指定getHello方法返回值的数据类型的Class对象,并且指定要调用的getHello方法及WSDL文件的命名空间,最后调用RPCinvokeBlocking方法并输出该方法的返回值。同理,调用getNamegetPlus的方法与以上步骤类似。

 

 

 

4.    使用Axis2提供的工具,根据WSDL生成客户端代码,调用该代码访问web service

在系统环境变量中配置AXIS2_HOME的地址,在CMD控制台下输入%AXIS2_HOME%/bin/wsdl2java -uri http://localhost:8080/axis2/services/MyService?wsdl -p client -s -o stub即可在当前路径下生成stub文件夹,其中包括了一个MyServiceStub的类,把这个类复制到项目之中,用wsdl2java编写简化的客户端程序。

MyServiceStub stub = new MyServiceStub();//创造一个服务对象

stub.getHello().get_return();//得到getHello()的返回值

MyServiceStub.GetName gn = new MyServiceStub.GetName();//创造一个封装getName的对象

gn.setName(name);//设置参数

System.out.println( stub.getName(gn).get_return());//输出放回值 

 

遇到的一些问题:

问题1 MyService类中包含一个getService方法,想利用对这个方法的不同重载,使其可以同时使用无输入、一个String输入和两个int输入不同方法,结果在浏览器中访问的时候无法访问。

解决方案:不能用重载来实现发布不同方法的功能,编写三个不同的方法来实现不同的功能,分别为:getHello()输出“hello world”,getName(String name)输出“hello $name”,getPlus(int a,int b)输出两数之和“$a+b”。

 

问题2:用wsdl2java编译生成stub类后,无法再程序中连接。

解决方案:发现我用的axis21.53版本,编译生成的stub类中自动生成的地址是https开头,不能正确连接,换为统一版本(1.41)后,自动生成的地址为http开头,经测试,连接成功。

 

体会:

在这次的实验中,我第一次体会到了webService真正用处,发现这种服务发布的功能强大,学会了如何配置tomcatSOAP引擎,自己独立编写了简单的web service程序,并且把它发布到服务中,进行网页的调用,编写了客户端,进行服务调用,了解了其调用过程的步骤和机理。并且掌握了用java2wsdl把服务的类进行调用的封装,根据WSDL生成客户端代码,使编写客户端更加容易和简单。成功地用客户端访问webService

    在实验中遇到了一些连接问题和配置问题,通过一步步地调试,发现问题,并成功解决问题。这次实验激起我对webService的极大兴趣,并且课余之时,寻找了许多资料阅读学习。

 

 

 

原创粉丝点击