实现webservice的开源框架有很多,axis是比较常用的一种,它能让你在tomcat上方便的发布webservice,它能帮助你把代码转化成wsdl文件,或者把wsdl文件转化成java代码,下面对axis2作详细说明,我会侧重讲cmd命令行发布和转化,因为最新版axis2的插件和多数eclipse版本不兼容。
下载地址:http://axis.apache.org/axis2/java/core/download.cgi
当前最新版本是1.6.1。
下载到本地:
Axis2-1.6.1-bin.zip里有axis2的jar包。
Axis2-1.6.1-docs.zip里有详细的帮助文档。
Axis2-1.6.1-src.zip里是源代码,方便爱学习的同学研究。
Axis2-1.6.1-war.zip里是axis的管理平台,直接扔到tomcat中就能用了。
PipeService代码如下:
package com.pipe.webservice; import com.pipe.bean.User; public class PipeService { public String sayHello(String name) { return name + " say: hello"; } public User getUser(String userName) { User user = new User(); user.setName(userName); return user; } }
网上帮助:http://axis.apache.org/axis2/java/core/docs/userguide-buildingservices.html#deployrun
直接拷贝如下目录结构到webapps/axis2/WEB-INF/services
Services.xml
<service name="PipeService" > <description> Please Type your service description here </description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass">com.pipe.webservice.PipeService</parameter> </service>
重启tomcat,成功。
考虑到给客户发布的话不太方便,故下面把它打成aar包。
在C盘下建文件夹AxisSession,按上文提到的目录结构把class和server.xml放好。
通过cmd进入目录,
打命令:jarcvf pipeservice.aar .(注意最后的句点)
回到该目录可以看到pipeservice.aar,通过axis2管理平台上传。
用户名密码admin axis2
同样成功。
在最外层输全带包名的类名。
java2wsdl -cn com.pipe.webservice.PipeService
成功生成。
wsdl2java -uri PipeService.wsdl
生成2个文件。
public void downFile(StringfilePath) { System.out.println(filePath); StringtargetUrl = "http://localhost:8090/axis2/services/PipeService"; try { PipeServiceStubps = new PipeServiceStub(targetUrl); PipeServiceStub.SayHellosayHello = new PipeServiceStub.SayHello(); PipeServiceStub.GetUsergetUser = new PipeServiceStub.GetUser(); sayHello.setName("sam"); SayHelloResponse shr = ps.sayHello(sayHello); getUser.setUserName("sam"); GetUserResponsegur = ps.getUser(getUser); Useru = gur.get_return(); System.out.println(shr.get_return()); System.out.println(u.getName()); }catch (AxisFault e) { e.printStackTrace(); }catch(RemoteException e) { // TODOAuto-generated catch block e.printStackTrace(); }