zoukankan      html  css  js  c++  java
  • 转载 使用axis2构建webservice

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

    1:可以使用这个插件来发布webservice,可以看网址:http://clq9761.iteye.com/blog/976029/======个人感觉一般不太适合我们做项目时候使用

    2:我们这里将axis2的夹包引入到一个web工程里,运行这个web工程来发布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项目

    第二步:引入需要的夹包

    有个问题夹包从哪里来呢,去axis的官网下载
    插件的下载网址:http://axis.apache.org/axis2/java/core/download.html

     

     下载后解压。解压文件里有lib文件夹,里面有需要的所有的jar包

    这里需要注意的是夹包的版本,在官网上下载的可能与本章中图片显示的不同,这个不用管,名字一样就行

    如果不行再换,先试试 ===============这样我们就可以把所有需要的夹包复制到web项目的lib下

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

    在WEB-INF下创建services文件夹然后创建------conf----META-INF----services.xml

    services.xml的内容如下:

    =================services.xml内容开始=========================

    <?xml version="1.0" encoding="UTF-8"?>
    <service name="Testservice">  <!-- 指定服务名,随便定义 -->
        <description>测试axis2webservices</description><!-- 服务的作用说明,可写可不写 -->
         <!-- 指定要发布的类路径 -->
        <parameter name="ServiceClass">  <!-- 自定义    name-->
               com.axiswevservice.test.TestService      <!-- 写的类路径 -->
        </parameter>  
       <!-- 类里面的方法,有其他方法就在写个operation标签 -->
        <operation name="test">  <!-- 类里面的方法名 -->
            <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
        </operation>   
    </service>
    <!-- http://localhost:8080/testaxis2webservice/services/Testservice?wsdl -->

     =================services.xml内容结束=========================

    http://localhost:8080/testaxis2webservice/services/Testservice?wsdl

    注释:上面的路径是搭建好web项目后要运行的wsdl路径   
    1: 指定服务名 =====就是要运行的wsdl路径的?和/之间的那一部分===可以说指定的服务名是wsdl路径的一部分

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

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

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

    第四步:配置web.xml
     =================web.xml内容开始=========================

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>testaxis2webservice</display-name><!-- 项目名,创建项目时候自动生成的 -->
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
        <servlet>  
            <servlet-name>AxisServlet</servlet-name>  
            <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
        <servlet-mapping>  
            <servlet-name>AxisServlet</servlet-name>  
            <url-pattern>/services/*</url-pattern>  
        </servlet-mapping>  
      
    </web-app>

     =================web.xml内容结束=========================

    第五步:书写发布类

    ============================书写的类开始======================

    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这个软件来测试服务端,也可以自己写代码测试

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

    1:建个java工程  ------创建一个java工程

    2:引入夹包

    3:写个测试类

    ===========================开始==================================

    第一步:创建一个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路径
                 * <xs:schema  targetNamespace="http://test.axiswevservice.com">
                 * 2:<xs:element name="test"> ======这个标签中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工程写个类测试下就行,夹包看上面截图,调用的代码要好好看看

  • 相关阅读:
    UVa OJ 148 Anagram checker (回文构词检测)
    UVa OJ 134 LoglanA Logical Language (Loglan逻辑语言)
    平面内两条线段的位置关系(相交)判定与交点求解
    UVa OJ 130 Roman Roulette (罗马轮盘赌)
    UVa OJ 135 No Rectangles (没有矩形)
    混合函数继承方式构造函数
    html5基础(第一天)
    js中substr,substring,indexOf,lastIndexOf,split等的用法
    css的textindent属性实现段落第一行缩进
    普通的css普通的描边字
  • 原文地址:https://www.cnblogs.com/Jeely/p/10761526.html
Copyright © 2011-2022 走看看