java

位置:IT落伍者 >> java >> 浏览文章

使用Axis2以普通的Java类建立Web Services


发布日期:2019年04月10日
 
使用Axis2以普通的Java类建立Web Services

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(LiHuairuselt = firstServceStubsayHello(sayHello)get_return()

Systemoutprintln(sayHello方法返回值+ruselt)

}

               

上一篇:Java实现网络监听

下一篇:用java的jwindow运行出的splash画面