Apache Axis是一个Web Services系统服务和客户端的实现
下载和部署Axis
)下载地址
下载Binary Distribution和WAR Distribution这两个压缩包
)将下载的axiswarzip解压解压后将axiswar复制到tomcat的webapps目录下
)启动tomcat浏览器访问//localhost:/axis/出现以下界面部署成功
以普通的Java类建立Web Services
)需要注意的这个普通的Java类是没有package的
)在\apachetomcat\webapps\axis\WEBINF\目录下建立pojo目录
)Java类
/** * 第一个Web Services * @author Luxh */public class FirstService {
public String sayHello(String name) {
String result = Hello+name+this is first Axis Application!;
return result;
}
public String getInfo() {
return This is first Axis Application!;
}
}
将这个类编译后的FirstServiceclass文件复制到\apachetomcat\webapps\axis\WEBINF\pojo目录下无需重启tomcatAxis支持热部署
)访问//localhost:/axis/services/listServices
可以看到普通的Java类已经发布为web Services
)访问web Services
//localhost:/axis/services/FirstService/getInfo
其中//localhost:/axis/services/FirstService/ 是Web Services 的地址getInfo是方法名称
其中//localhost:/axis/services/FirstService/ 是Web Services 的地址sayHello是方法名称?name=LiHuai是参数名称和参数值
传参数的时候要注意一定要跟提供服务的方法中的参数名一致public String sayHello(String name)
Java客户端使用RPC方式调用Web Services
)新建一个Java Project将axisbinzip解压解压后将\axis\lib\目录下的所有jar引入到项目的classpath路径中
)客户端代码
package cnluxhwsclient;import javaxxmlnamespaceQName;import orgapacheaxisAxisFault;import orgapacheaxisaddressingEndpointReference;import orgapacheaxisclientOptions;import orgapacheaxisrpcclientRPCServiceClient;import orgjunitTest;public class FirstClient {
/** * 用RPC方法调用Web Services * @throws AxisFault
*/@Testpublic void testGetServices() throws AxisFault { //创建一个访问服务的客户端
RPCServiceClient client = new RPCServiceClient() //获取操作客户端选项的持有者
Options options = clientgetOptions() //设置要调用的Web Services 的地址
String ServiceEPR = //localhost:/axis/services/FirstService;
EndpointReference epr = new EndpointReference(ServiceEPR)
optionssetTo(epr)
//因为提供Web Services普通的Java类没有package
//所以默认是
//getInfo是要调用的方法
QName qName = new QName( getInfo)
//qName 调用的方法
//new Object[]{}传递的参数值
//new Class[]{} 返回值类型
Object[] result = clientinvokeBlocking(qName new Object[]{} new Class[]{Stringclass})
Systemoutprintln(返回的结果是+result[])//调用sayHello方法
qName = new QName( sayHello)
result = clientinvokeBlocking(qName new Object[]{LiHuai} new Class[]{Stringclass})
Systemoutprintln(返回的结果是+result[])
}}
使用生成stub的方式调用Web Services
可以使用wsdljava命令生成调用Web Services的客户端代码
wsdljava命令格式wsdljava //localhost:/axis/services/FirstService?wsdl p cnluxhwsclient s o stub
uri 指定访问的Web Services wsdl文件路径
p 指定了生成的Java类的包名
o 指定了生成文件保存的根目录
)在命令行进入到axisbinzip解压后的\axis\bin\目录因为wsdljava命令在这个目录中
)输入 wsdljava //localhost:/axis/services/FirstService?wsdl p client s o stub 然后回车
)执行完后在\axis\bin\目录下有个stub文件夹在stub文件夹下的src\cn\luxh\ws\client包下有个FirstServiceStubjava和FirstServiceUnsupportedEncodingExceptionExceptionjava类我们把这两个类复制项目中相应的包下就可以直接调用Web Services方法了
)stub客户端代码
package cnluxhwsclient;import javarmiRemoteException;import javaxxmlnamespaceQName;import orgjunitTest;public class FirstClient {@Testpublic void testGetServiceByStub()
throws RemoteException FirstServiceUnsupportedEncodingExceptionException {FirstServiceStub firstServceStub = new FirstServiceStub()
//wsdljava命令将Web Services 的方法封装成了静态类
//所以需要通过下面的方法获取返回结果FirstServiceStubGetInfo getInfo = new FirstServiceStubGetInfo()
String ruselt = firstServceStubgetInfo(getInfo)get_return()
Systemoutprintln(getInfo方法返回值+ruselt)
FirstServiceStubSayHello sayHello = new FirstServiceStubSayHello()
sayHellosetName(LiHuai)ruselt = firstServceStubsayHello(sayHello)get_return()
Systemoutprintln(sayHello方法返回值+ruselt)
}