博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用axis2构建webservice(项目中正好用到了)
阅读量:4165 次
发布时间:2019-05-26

本文共 4673 字,大约阅读时间需要 15 分钟。

axis2是可以实现webservice的一个插件,使用这个插件可以发布webservice。

这是我们常用的,比如要你写一个webservice客户端,你要怎么做呢?创建一个web工程,然后引入axis2的夹包,使用axis2来实现一个webservice,这是一个最基本的想法

想使用axis2实现webservice要做几件事如下:

  1:创建一个web工程,====还可以说是创建一个web服务====或者是创建一个web项目

  2:要引入需要的夹包到web工程的lib文件夹内

  3:创建service.xml文件  =====axis2发布webservice需要配置的xml文件

  4:配置web工程的web.xml,扫描axis2的service.xml文件 

  5:书写对应的类来实现

然后运行写好的web项目,在网页上执行路径就可以了,其实按着步骤走挺简单的,下面是每一步的详细介绍

第一步:创建一个web项目

第二步:引入需要的夹包

插件的下载网址:http://axis.apache.org/axis2/java/core/download.html

下载后解压。解压文件里有lib文件夹,里面有需要的所有的jar包,这样我们就可以把所有需要的夹包复制到web项目的lib下。

第三步:创建service.xml文件,看下图吧

在WEB-INF下创建services文件夹然后创建------conf----META-INF----services.xml,内容如下:

测试axis2webservices
com.axiswevservice.test.TestService

注释:上面的路径是搭建好web项目后要运行的wsdl路径  

1: 指定服务名 =====就是要运行的wsdl路径的?和/之间的那一部分===可以说指定的服务名是wsdl路径的一部分

2:服务的作用说明====这个不用管===就相当于一个注释,说说你要发布的webservice是干啥的

3:指定要发布的类路径======就是你要把那个类做成webservice

4:类里面的方法,有其他方法就在写个operation标签=======配置你写的类里面的方法

第四步:配置web.xml

testaxis2webservice
index.jsp
AxisServlet
org.apache.axis2.transport.http.AxisServlet
1
AxisServlet
/services/*

第五步:书写发布类

package com.axiswevservice.test;public class TestService {        public String test(String test){        return "测试axis2webservice:"+test;    }    }

类写的简单点,现在只是测试没必要写复杂,就写一个类,类里写一个方法

写完这里之后,就要和上面的service.xml对应起来了,service.xml里面的类路径,方法名要和这里写的一样。

写完之后就可以了,这是项目的结构图如下

在eclipce中加载tomcate,将项目加载到tomcate中,运行tomcate 启动项目

然后在网页上输入http://localhost:8080/testaxis2webservice/services/Testservice?wsdl

wsdl路径的组成:tomcate里配置的ip和端口号 + 项目名 + web.xml里配置的<url-pattern> + service.xml里面指定的服务名+?wsdl

 运行结果如下:

这样就成功了,使用axis2来实现webservice服务端,这样在写个客户端调用就可以了

开始写客户端调用服务端写的接口通不通,

我们可以使用soupui这个软件来测试服务端,也可以自己写代码测试

这里我们自己写:要怎么做呢?很简单,需要做如下:

第一步:创建一个java工程======就是创建一个java项目,我们的项目一般分为java项目,web项目,maven项目。。。。。。

第二步:引入夹包,夹包引入的方法和上面写服务端引入的一样,但是多了两夹包httpcore-4.4.4.jar,commons-codec-1.3.jar

         这两个夹包在axis2的插件的lib下也可以找到

第三步:书写测试类

 其实就是建个java项目,把写的web工程的夹包复制到java项目下,在从解了压的axis2插件的lib下把少的两个夹包加进来,写个类测一下就行了

写个测试类

package testwebserver;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 test {    public static void main(String[] args) {            try {            //本机tomcat端口默认为8081,参数是wsdl网址的一部分            EndpointReference targetEPR = new EndpointReference("http://localhost:8081/testaxis2webservice/services/Testservice");              RPCServiceClient sender = new RPCServiceClient();              Options options = sender.getOptions();              options.setTimeOutInMilliSeconds(2*20000L);//超时时间20s              options.setTo(targetEPR);              /**             * 参数:             * 1:在网页上执行 wsdl后xs:schema标签的targetNamespace路径             * 
* 2:
======这个标签中name的值 * */ QName qname = new QName("http://test.axiswevservice.com", "test"); String str = "客户端调用成功"; //方法的入参 Object[] param = new Object[]{str}; Class
[] types = new Class[]{String.class}; //这是针对返值类型的 /** * RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。 * invokeBlocking方法有三个参数 * 第一个参数的类型是QName对象,表示要调用的方法名; * 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[]; * 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。 * * 当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。 */ Object[] response1 = sender.invokeBlocking(qname, param, types); System.out.println(response1[0]); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

这是个java项目,直接写在main方法内,直接运行main方法就可以了,

注意:你这里写好的服务端得一直起着,这里写的测试调用才能调通,看下图:

总结:如果都测通了,我们要明白一下几点

1:axis2要实现webservice需要哪些夹包,夹包是哪里来的

   需要哪些夹包看截图,夹包是从axis2的官网下的,官网有个.....bin.zip的文件,解压这个文件,里面有个lib文件夹,那里面有所有的夹包

2:怎么才能使用axis2发布一个webservice,

    需要axis2的一个service.xml配置文件,我们要确保项目启动时要扫描到这个配置文件,并且要和写的类/方法等一致

    那么程序就会将service.xml里面配置的类和方法做成一个webserce发布,

    我们这里是将service.xml引入到了一个web工程里,使用web工程的web.xml来扫描service.xml文件,当运行这个web工程的时候    程序就将service.xml里面的配置的做成一个webservce服务发布了,只要这个web工程一直起着,我们就可以调用发布的服务

3:要发布的类,中的方法怎么写

     方法有个返回值和入参就行,不管写方法在复杂,格式就是那样的

4:客户端怎么写的?

    客户端就是写个java工程写个类测试下就行,夹包看上面截图,调用的代码要好好看看

转载地址:http://pqlxi.baihongyu.com/

你可能感兴趣的文章
三维点云处理:8 Kd-tree
查看>>
三维点云处理:9 octree
查看>>
python记录
查看>>
C++:冒泡排序的实现算法代码
查看>>
PCL是否安装成功测试(手把手超详细版)
查看>>
3、PCL 加载自己的点云数据集并显示出来
查看>>
PCL 三维点云轮廓提取
查看>>
C++:插入排序算法实现代码
查看>>
C++:快速排序法的代码实现
查看>>
4、ROS下播放激光点云bag数据并可视化
查看>>
5、激光雷达bag文件和转PCD文件
查看>>
2、关于点云格式的碎碎念
查看>>
ROS初始化时候sudo rosdep init rosdep update出现的各种问题亲测成功的解决办法(2020.12.29已解决!)
查看>>
6、ubuntu16.04 下 pcl的vogelgrid降采样处理 过程
查看>>
8、在ubuntu16.04 、ROS下使用 rviz 显示octomap_sever 构建的三维栅格地图
查看>>
如何在ubuntu16.04下运行第一个C++和python程序,以helloworld为例
查看>>
古月居 PyTorch入门:一起从零搭建神经网络一、PyTorch环境搭建
查看>>
古月居 PyTorch入门:一起从零搭建神经网络二、PyTorch基础知识
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 三、快速搭建一个简单的神经网络
查看>>
用函数实现判断一个数是不是素数
查看>>