axis 部署及获取webService接口

来源:互联网 发布:悟空助手mac电脑版 编辑:程序博客网 时间:2024/06/05 05:16

一、服务端发布webService

1.需要的jar包:activation.jar ,axis.jar ,axis-ant.jar,axis-schema.jar ,commons-discovery-0.2.jar ,

commons-logging-1.0.4.jar ,jaxrpc.jar ,log4j-1.2.8.jar ,mailapi.jar ,saaj.jar ,wsdl4j-1.5.1.jar ,xmlsec-1.3.0.jar

2.web-inf  目录下编辑server-config.wsdd 文件

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <handler type="java:org.apache.axis.handlers.http.URLMapper"
        name="URLMapper" />
        
          <!-- 附件列表start -->
       <arrayMapping languageSpecificType="java:com.webService.webItem.entity.TbAttache[]" qname="ns1:TbAttacheList" xmlns:ns1="com.webService.webItem.entity"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
     <service name="getAttacheList" provider="java:RPC">
        <parameter name="allowedMethods" value="findAttacheList"/>
        <parameter name="className" value="com.webService.webItem.controller.WebAttacheController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TbAttache" qname="ns1:getAttacheList" xmlns:ns1="urn:WebAttacheController"/>
     </service>
       <!-- 附件列表end -->
       
        <!-- 事项列表start -->
       <arrayMapping languageSpecificType="java:com.webService.webItem.entity.TbItemBaseInfo[]" qname="ns1:TbItemBaseInfoList" xmlns:ns1="com.webService.webItem.entity"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
     <service name="getItemList" provider="java:RPC">
        <parameter name="allowedMethods" value="findItemList"/>
        <parameter name="className" value="com.webService.webItem.controller.WebItemController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TbItemBaseInfo" qname="ns1:getItemList" xmlns:ns1="urn:WebItemController"/>
     </service>
       <!-- 事项列表end -->
       
     <!-- 事项详情start -->
     <service name="getItemBaseInfoById" provider="java:RPC">
        <parameter name="allowedMethods" value="findItemBaseInfo"/>
        <parameter name="className" value="com.webService.webItem.controller.WebItemController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TbItemBaseInfo" qname="ns1:getItemBaseInfoById" xmlns:ns1="urn:WebItemController"/>
     </service>
      <!-- 事项详情end -->
      
      <!-- 部门列表start -->
     <arrayMapping languageSpecificType="java:com.webService.webItem.entity.TsUnit[]" qname="ns1:UnitList" xmlns:ns1="com.webService.webItem.entity"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
     
      <service name="getUnitList" provider="java:RPC">
        <parameter name="allowedMethods" value="findUnitList"/>
        <parameter name="className" value="com.webService.webItem.controller.WebUnitController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TsUnit" qname="ns1:getUnitList" xmlns:ns1="urn:WebUnitController"/>
     </service>
      <!-- 部门列表end -->
          <!-- 应用类型列表start -->
     <arrayMapping languageSpecificType="java:com.webService.webItem.entity.TbClass[]" qname="ns1:ClassList" xmlns:ns1="com.webService.webItem.entity"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
     
      <service name="getClassList" provider="java:RPC">
        <parameter name="allowedMethods" value="findClassList" />
        <parameter name="className" value="com.webService.webItem.controller.WebClassController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TbClass" qname="ns1:getClassList" xmlns:ns1="urn:WebClassController"/>
     </service>
     <!-- 应用类型列表end -->
     
      <!-- 部门详情start -->
       <service name="getUnitById" provider="java:RPC">
        <parameter name="allowedMethods" value="findUnitById"/>
        <parameter name="className" value="com.webService.webItem.controller.WebUnitController"/>
        <beanMapping languageSpecificType="java:com.webService.webItem.entity.TsUnit" qname="ns1:getUnitById" xmlns:ns1="urn:WebUnitController"/>
     </service>
     <!-- 部门详情end -->
     
      
    <transport name="http">
        <requestFlow>
            <handler type="URLMapper" />
        </requestFlow>
    </transport>
</deployment>

3.web.xml中添加配置项

     <!--webService axis -->
   <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>
                org.apache.axis.transport.http.AxisServlet
            </servlet-class>
  </servlet>

<servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/AxisServlet</url-pattern>
  </servlet-mapping>

<!--部署后的url根路径 -->

  <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
  </servlet-mapping>

经过上面三步以后应该能够把webService 部署到服务器上去了,(以tomcat为例)部署成功后在浏览器输入http://localhost:8080/项目名称/services 可看到下面的页面


可以看到这个页面是与server-config.wsdd中的配置是一致的点击链接后可进入到方法中如下图:

到这里就说明我们的接口已经发布成功了

二、客户端获取webService 接口

别人已经发不好了的webServices接口如何在自己的程序中取调用呢?

首先,当然要知道别人发布的webServices 的url ,然后就通过客户端自己写的方法来调用咯具体代码示例如下:

import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

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 org.nsccsz.dapeng.online.bean.TbAttache;
import org.nsccsz.dapeng.online.bean.TbClass;
import org.nsccsz.dapeng.online.bean.TbItemBaseInfo;
import org.nsccsz.dapeng.online.bean.TsUnit;

    /**
     *
     * @param urlName
     * @param itemName  事项名称
     * @param classType 服务类型
     * @param classId   事项类型
     * @param unitName  单位id
     * @param spbm
     * @return
     * @throws Exception
     */

public static List findItemList(String urlName,String itemName,String classType,String ztmsIndex,String unitId)
            throws Exception {
        TbItemBaseInfo tbItemBaseInfo[];
        String endpoint = urlName; // 服务所在位置
        Service service = new Service();
        Call call = (Call) service.createCall();
        // 注册JavaBean,注意和server-config.wsdd中的配置代码比较
        QName qn = new QName("urn:WebItemController", "getItemList");
        call.registerTypeMapping(TbItemBaseInfo.class, qn,
                new BeanSerializerFactory(TbItemBaseInfo.class, qn),
                new BeanDeserializerFactory(TbItemBaseInfo.class, qn));
        call.setTargetEndpointAddress(new URL(endpoint));
        
        // 调用的服务器端方法
        call.setOperationName(new QName("getItemList", "findItemList"));
        call.addParameter("itemName", qn, ParameterMode.IN);
        call.addParameter("classType", qn, ParameterMode.IN);
        call.addParameter("ztmsIndex", qn, ParameterMode.IN);
        call.addParameter("unitId", qn, ParameterMode.IN);
        call.setReturnType(qn, TbItemBaseInfo[].class);
         tbItemBaseInfo =   (TbItemBaseInfo[]) call.invoke(new Object[] { itemName,classType,ztmsIndex,unitId });
         List<Object> list=new ArrayList();
            if(tbItemBaseInfo.length>0){
            for(int i=0;i<tbItemBaseInfo.length;i++){
                list.add(tbItemBaseInfo[i]);
            }}
         return list;
    }

/**
     * 查询单位列表
     * @param urlName
     * @return
     * @throws Exception
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static List<TsUnit> findUnitList(String urlName)
            throws Exception {
        TsUnit tsUnit[]=null;
        String endpoint = urlName; // 服务所在位置
        Service service = new Service();
        Call call = (Call) service.createCall();
        
        // 注册JavaBean,注意和server-config.wsdd中的配置代码比较
        QName qn = new QName("urn:WebUnitController", "getUnitList");
        // 注册序列化和反序列化类
        call.registerTypeMapping(TsUnit.class, qn,
                new BeanSerializerFactory(TsUnit.class, qn),
                new BeanDeserializerFactory(TsUnit.class, qn));
        call.setTargetEndpointAddress(new URL(endpoint));
        
        // 调用的服务器端方法
        call.setOperationName(new QName("getUnitList", "findUnitList"));
        call.setReturnType(qn,TsUnit[].class);
        tsUnit=  (TsUnit[]) call.invoke(new Object[] {});
        List<TsUnit> list=new ArrayList();
        if(tsUnit.length>0){
        for(int i=0;i<tsUnit.length;i++){
            list.add(tsUnit[i]);
        }}
        return list;
    }

/**
     * 根据单位id 查询单位信息
     * @param urlName
     * @param unitId
     * @return
     * @throws Exception
     */
    public static TsUnit findUnitById(String urlName,String unitId)
            throws Exception {
        TsUnit tsUnit=null;
        String endpoint = urlName; // 服务所在位置
        Service service = new Service();
        Call call = (Call) service.createCall();
        // 注册JavaBean,注意和server-config.wsdd中的配置代码比较
        QName qn = new QName("urn:WebUnitController", "getUnitById");
        call.registerTypeMapping(TsUnit.class, qn,
                new BeanSerializerFactory(TsUnit.class, qn),
                new BeanDeserializerFactory(TsUnit.class, qn));
        call.setTargetEndpointAddress(new URL(endpoint));
        
        // 调用的服务器端方法
        call.setOperationName(new QName("getUnitById", "findUnitById"));
        call.addParameter("arg1", qn, ParameterMode.IN);
        call.setReturnType(qn,TsUnit.class);
        tsUnit= (TsUnit) call.invoke(new Object[] {unitId});
        return tsUnit;

    }

第一个方法findItemList有多个参数而且返回的是个对象集合

第二个方法findUnitList没有参数 返回的也是个对象集合

第三个方法findUnitById 没有参数 返回的是单个对象

注意了:这个地方在server-config.wsdd配置的时候要是怎么配的对象的集合在这里只能以数组的形式配置

而urlName 可以用配置文件的方式来处理  不要硬编码的 这里urlName的值为    http://localhost://projectName/services/getItemBaseInfoById?wsdl


好了 大概这个样子

0 0
原创粉丝点击