加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

axis 部署及获取webService接口

发布时间:2020-12-16 23:49:51 所属栏目:安全 来源:网络整理
导读:一、服务端发布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

一、服务端发布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",ParameterMode.IN);
?? ??? ?call.addParameter("classType",ParameterMode.IN);
?? ??? ?call.addParameter("ztmsIndex",ParameterMode.IN);
?? ??? ?call.addParameter("unitId",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,
?? ??? ??? ??? ?new BeanSerializerFactory(TsUnit.class,
?? ??? ??? ??? ?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));
?? ??? ?call.setTargetEndpointAddress(new URL(endpoint));
?? ??? ?
?? ??? ?// 调用的服务器端方法
?? ??? ?call.setOperationName(new QName("getUnitById","findUnitById"));
?? ??? ?call.addParameter("arg1",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


好了 大概这个样子

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读