推荐使用(有复杂的数据对象传输时,定制发布)
1. 在服务端程序中先编写提供服务的接口,以及接口中方法要调用或要返回的javabean对象(必须序列化), 命令中-p指定接口中要用到对象的包路经。然后把包含有接口和bean对象的文件拷贝到AXIS目录下的WEB-INF子目录,使用如下指令:
java -Djava.ext.dirs=lib org.apache.axis.wsdl.Java2WSDL -o temp.wsdl -l"http://localhost:8090/axis/services/WS_UP_OBJ" -n "urn:WS_UP_OBJ" -p"com.lovo.upobj,com.lovo.upobj.po" "urn:WS_UP_OBJ" com.lovo.upobj.bo.UpObjIface
//WS_UP_OBJ 是 web service 的服务名,8090 是web服务的端口 ,WS_UP_OBJ可以修改为你自己定义的web service 的服务名
//com.lovo.upobj,com.lovo.upobj.po 接口中方法要调用或要返回的javabean对象
//com.lovo.upobj.bo.UpObjIface 为服务端 接口
运行上述命令 后,在当前目录可以得到 temp.wsdl 服务描述文件
2:有了temp.wsdl服务描述文件,就可以使用它来生成JAX-RPC 的框架,这个框架使得我们编程变得简单
在AXIS目录下的WEB-INF子目录,使用以下的命令就可以生成这个框架:
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -Nurn:WS_UP_OBJ com.lovo.upobj.bo temp.wsdl
//WS_UP_OBJ 是 web service 的服务名,com.lovo.upobj.bo 为服务端 接口 UpObjIface 所在的包
使用这个命令后将 在 包含有接口和bean对象的文件 中 生成以下新文件:
***Interface.java:新的***Interface接口,它扩展了java.rmi.Remote接口;
***InterfaceService.java:客户端服务接口,用来获得***Interface对象的引用;
***InterfaceServiceLocator.java:在客户端使用,主要用来服务定位;
***SoapBindingImpl.java:服务端实现类,它实现了***Interface接口,服务端的业务方法实现代码就在这里编写;
***SoapBindingSkeleton.java:服务端Skeleton;
***SoapBindingStub.java:客户端Stub;
BookVO.java:新的BookVO序列化对象;
deploy.wsdd:部署这个Web服务的脚本;
undeploy.wsdd:卸载这个Web服务的脚本。
在***SoapBindingImpl.java编写服务端的业务方法实现代码;
然后在***SoapBindingStub.java 文件 的对应返回 po对象 的方法中 注册 po 对象
QName qn = new QName( "TaxSgsWS" //服务名, "TaxSgsWS" //服务名);
_call.registerTypeMapping(com.sgs.bank.CallPO.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(com.sgs.bank.CallPO.class //po对象, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(com.sgs.bank.CallPO.class //po对象, qn));
3:接下来的工作是编译服务端相关的文件:生成.class 文件。(可以把web-info下的文件包copy回eclipse下编译成.class文件)
4:把编译后的服务端程序的class文件连同完整的包目录 拷贝到服务器相应部署目录下的 AXIS\WEB-INF\class子目录。
5: 部署
在控制台中,转到deploy.wsdd所在的目录,执行以下的命令就可以完成部署(必须启动tomcat服务器)
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8090/axis/services/AdminService deploy.wsdd
卸载:
在控制台中,转到undeploy.wsdd所在的目录,执行以下的命令就可以完成卸载
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8090/axis/services/AdminService undeploy.wsdd
6:修改server-config.wsdd,在<service name= "相应的web service服务名"></service>最后一行前 加入
<beanMapping languageSpecificType="java:com.sgs.bank.CallPO"
qname="ns7:TaxSgsWS" xmlns:ns7="TaxSgsWS"/>
//com.sgs.bank.CallPO 是欲 返回的 可序列化的 javabean 对象,可修改为你自己的 对象。
//TaxSgsWS web service 服务名,可改为你自己定义的 服务名
注意:6可以省略....(如果不能正常运行客服端时才用到).如果客服端和服务器不在一个进程调用时,需要将服务器产生的所需要的类(如果不清楚就将全部)打成jar以方便客服端调用.