一、服务端发布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
好了 大概这个样子