zoukankan      html  css  js  c++  java
  • Axis1.4框架 实现webservice服务器和客户端

    一:软件环境

    1. win7旗舰版, Eclipse,JDK1.6,tomcat6.0,Axis1.4的包。 至于Axis1.4包网上可以下载,如果是在找不到可以留言给我。

    二:摘要

    将解压后的 axis-1_4webapps下的axis 目录考到 %TOMCAT_HOME%/Webapps/ 目录下
    启动tomcat后在浏览器里输入 http://localhost:8080/axis 会看到下图所示

    点击上图中的 链接,页面上会提示已经有的包和缺少的包的信息,根据提示将必须的包下载全,将这些类包复制到 %tomcathome%/webapps/axis/WEB-INF/lib/目录下重新启动tomcat,直到Validation页面中看不到有Error与Warning的提示信息。

    Axis支持三种web service的客户端访问方式,分别为:

      • Dynamic Invocation Interface ( DII)
      • Dynamic Proxy方式
      • Stubs方式

    PS:看到很多资料将上述方式列为Web Servcie的三种“部署和开发方法,个人觉得有些欠妥

    下面介绍axis部署和发布web service的方式:

      • JWS  - 即时发布
      • WSDD  –定制发布

    三:JWS --即时发布

     JWS(Java WebService)是最简单的一种方式。Axis允许把普通Java类的源文件的扩展名改为.jws,然后把它简单的copy到AXIS_HOME下。这样,Axis 会自动编译.jws文件,
     并把它自动加入到Java Web Servie的服务中。非常简单和灵活,但是这种方式的缺点是:只能是java源代码,同时类中不能含有包名。具体过程如下

    1. 用Eclipse或者文本编辑器编写一个java类 SayHello.java(此类不含包名)

     public class SayHello {
         public String sayMsg(String name){
             return "Hello: "+name;
         }
     }

      2. 将上面的类(SayHello.java)copy到 %tomcat_home%/webapps/axis/ 目录下,只需要把类的源文件(不是class)到这个目录下,重命名为:SayHello.jws

    3. 打开浏览器输入: http://localhost:8080/axis/SayHello.jws 会看到:

    点击上图  Click to see the WSDL 的链接,就可以看到生成的wsdl。

    4. 使用 Dynamic Invocation Interface ( DII) 方式访问客户端 实现如下:

    复制代码
    package client;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    
    public class TestClient {
    
        /**
         * @see axis框架实现简单的 webService客户端, 读webServicez服务器内容,如果有问题请留言
         * @param webUrl 设置调用的wsdl路径, 即访问的路径
         * @param method 设置调用的方法名
         * @param parameters 设置调用的方法的参数
         * @author 邓龙胜(微信simpledls)
         * @throws Exception
         */
        public static void readerWebserviceContent(String webUrl,String method,Object[] parameters) throws Exception {
            
            Service service = new Service();
            Call call = (Call) service.createCall();
            // 这里是要调用的方法名
            call.setOperationName(method);
            // 设置调用的wsdl路径, 即访问的路径
            call.setTargetEndpointAddress(webUrl);
            // parameters 是为方法传递参数, 必须和调用的方法体的参数类型和数量一致
            String val = (String) call.invoke(parameters);
            System.out.println("这是webservice服务器返回的信息:
    " + val);
        }
        
        
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            String webUrl = "http://192.168.1.121:8080/axis/SayHello.jws";
            String method = "sayMsg";
            Object[] parameters= new Object[] { "axis web service" };
            TestClient.readerWebserviceContent(webUrl, method, parameters);
        }
    }
    复制代码

    四:WSDD(Web Service Deployment Descriptor)文件发布Web Service

    1. 为了使大家懂的如何映射实体类,故下文我将用 实体类(javaBean) 作为参数的方式引导大家,那么先在项目中新建一个JavaBean:UserBean.java 代码如下:
    复制代码
    package wsaxis.bean;
    
    public class UserBean {
        
        private String userName; //姓名
        private Integer age;     //年龄
     
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        } 
    }
    复制代码

    2. 创建一个 MessageService.java 类, 代码如下:

    复制代码
    package wsaxis;
    
    import wsaxis.bean.UserBean;
    
    public class MessageService {
         /**
         * UserBean 作为参数*/
        public String getBeanStr(UserBean bean) {
            return "You Name:" + bean.getUserName() + " , You Age:" + bean.getAge();
        }
    }
    复制代码

    3. 创建一个 deploy.wsdd 文件, 该文件主要用于生成发布文件 server-config.wsdd ,  在项目中依次点击: new --> other -->file  内容如下:

    复制代码
    <deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
      <service name="MessageService" provider="java:RPC" style="rpc" use="encoded">
        <parameter name="className" value="wsaxis.MessageService"/>
        <parameter name="allowedMethods" value="*"/>
             <typeMapping xmlns:ns1="http://wsaxis.michael.com" qname="ns1:userBean"
                 type="java:wsaxis.bean.UserBean"
                 serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
                 deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
           />
      </service>
    </deployment>
    复制代码

    上面要注意: value="wsaxis.MessageService" , 这个 MessageService 就是你创建的那个 MessageService.java,路径一定不要搞错 !

           type="java:wsaxis.bean.UserBean", 这个 UserBean 就是你创建的那个 UserBean.java , 路径一定不要搞错 !

    4. 创建一个 undeploy.wsdd 文件, 该文件主要用于取消发布 web service , 创建方法同上。 其内容如下

    <undeployment
        xmlns="http://xml.apache.org/axis/wsdd/">
      <!-- Services from MessageService WSDL service -->
      <service name="MessageService"/>
    </undeployment>

    5. 将上面写好的两个类已编译好的class文件复制到 %tomcat_home%/axis/WEB-INF/class/ 目录下,(注意:要完整的目录结构复制过来),然后在把两个wsdd文件复制到%tomcat_home%/axis/WEB-INF/ 目录下,打开cmd进入 %tomcat_home%/axis/WEB-INF/ 目录下:

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8080 deploy.wsdd 

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8080 -s /axis/servlet/AxisServlet deploy.wsdd

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient –lhttp://localhost:8080/axis/services/MessageService deploy.wsdd

    分别用CMD 输入如上命令,如果成功系统会提示如下:

    Processing file deploy.wsdd
    <Admin>Done processing</Admin>

    (有可能第三条不成功,但是没关系,主要看下 %tomcat_home%/axis/WEB-INF/  目录下是否已经生成 server-config.wsdd 文件) , 如果有此文件 则在浏览器输入

    http://localhost:8080/axis/services/MessageService   会看到下图

     

    6. 生成client

    打开cmd进入 %tomcat_home%/axis/WEB-INF/ 目录下:

    java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p client http://localhost:8080/axis/services/MessageService?wsdl

    输入以上命令,会在当前的目录下生成 client 文件夹,这个目录里文件就是 客户端源码。

    7.使用 Stubs 方式访问客户端 实现如下:

    复制代码
    package wsaxis;
    
    import java.net.URL;
    import javax.xml.namespace.QName;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.ser.BeanDeserializerFactory;
    import org.apache.axis.encoding.ser.BeanSerializerFactory;
    import wsaxis.bean.UserBean;
    
    public class TestStubClient {
        
         /**
          *@see    axis框架实现简单的 Stubs方式 webService客户端, 读取基于WSDD方式生成的webServicez服务器内容
         * @param namespaceURI 命名空间URL
         * @param localPart 本地部分名
         * @param method 要调用的方法名
         * @param wsdlUrl 服务的绝对路径
         * @param userBean 用户实体
         * @author 邓龙胜(微信simpledls)
         * @date 2015.12.11
         * @throws Exception
         */
        public static void readerWebserviceContent(String namespaceURI,String localPart,String method,
                String wsdlUrl,UserBean userBean) throws Exception {
            
            QName qname = new QName(namespaceURI,localPart);
            Service s = new Service();
            Call call = (Call) s.createCall();
            // 注册这个bean为可序列化的.传递参数x
            call.registerTypeMapping(UserBean.class, qname,new BeanSerializerFactory(UserBean.class, qname),
                    new BeanDeserializerFactory(UserBean.class, qname));
            // 设置一下调用方法名.
            call.setOperationName(method);
            // 设置一下这个服务的绝对路径.
            call.setTargetEndpointAddress(new URL(wsdlUrl));
            // 通知方法,并返回结果
            String str = (String) call.invoke(new Object[] {userBean});
            System.out.println("web service 返回信息:
    " + str);
        }
        
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            String namespaceURI = "http://wsaxis.michael.com";
            String localPart = "denglongsheng";
            String method = "getBeanStr";
            String wsdlUrl = "http://localhost:8080/axis/services/MessageService?wsdl";
            //实例化一个UserBean,这个UserBean是生成client的UserBean
            UserBean userBean = new UserBean();
            userBean.setAge(33);
            userBean.setUserName("DLSssadf");
            //调用读取的方法
            TestStubClient.readerWebserviceContent(namespaceURI, localPart, method, wsdlUrl, userBean);
        }
    
    }
    复制代码

    五.通过WSDD文件卸载发布的 webservice:

    1.打开cmd进入%tomcat_home%/axis/WEB-INF/目录下:
    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd

    2.如果不是默认8080端口需要加上参数: -p 8082:
    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8082 undeploy.wsdd

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    六. 完。

  • 相关阅读:
    d3js selections深入理解
    d3js scales深入理解
    d3js shape深入理解
    如何使用chrome devtool调试Mobile网页?
    为什么有时父元素无法包含子元素?
    base64编码以及url safe base64是怎么工作的?
    古老的CSS同高列问题
    springboot2.0整合redis的发布和订阅
    如何在centos7中设置redis服务器开机自启动
    1.Linux安装redis
  • 原文地址:https://www.cnblogs.com/Nicolasap/p/10064470.html
Copyright © 2011-2022 走看看