1. 配置tomcat和SOAP引擎
下载axis2-1.4.1-bin.zip和axis2-1.4.1-war.zip,分别解压。
在axis2-1.4.1-war.zip解压出来的文件夹中有一个axis2.war,把它复制到“<tomcat安装目录>/webapps/”目录下,启动Tomcat,即可看到在“<tomcat安装目录>/webapps/”目录下有个axis2的文件夹
在浏览器的地址栏中,输入http://localhost:8080/axis2/,验证axis2安装成功。
2. 简单的Web service程序在Axis2中发布
简单的POJO,代码如下:
public class MyService {
public String getHello()
{
return "hello world";
}
public String getName(String name)
{
return "Hello "+name;
}
public int getPlus(int a, int b)
{
return a+b;
}
}
把编译之后的MyService.class放到
<Tomcat安装目录>/webapps/axis2/WEB-INF/pojo下,浏览器输入http://localhost:8080/axis2/services/listServices,显示已发布的服务。
浏览器地址栏输入:http://localhost:8080/axis2/services/MyService/getHello
可显示相关xml格式的返回内容。
浏览器地址栏输入:
http://localhost:8080/axis2/services/MyService/getName?name=bill
可显示相关xml格式的返回内容。
浏览器地址栏输入:
http://localhost:8080/axis2/services/MyService/getPlus?a=1&b=2
可显示相关xml格式的返回内容。
说明服务发布成功且可访问。
3. 编写程序利用SOAP调用web service
编写MyRPCClient类作为访问的客户端,使用RPC方式(RPCServiceClient)调用WebService,在RPC中指定WebService的URL,指定getHello方法返回值的数据类型的Class对象,并且指定要调用的getHello方法及WSDL文件的命名空间,最后调用RPC的invokeBlocking方法并输出该方法的返回值。
同理,调用getName和getPlus的方法与以上步骤类似。
4. 使用Axis2提供的工具,根据WSDL生成客户端代码,调用该代码访问web service
在系统环境变量中配置AXIS2_HOME的地址,在CMD控制台下输入%AXIS2_HOME%/bin/wsdl2java -uri http://localhost:8080/axis2/services/MyService?wsdl -p client -s -o stub即可在当前路径下生成stub文件夹,其中包括了一个MyServiceStub的类,把这个类复制到项目之中,用wsdl2java编写简化的客户端程序。
MyServiceStub stub = new MyServiceStub();//创造一个服务对象
stub.getHello().get_return();//得到getHello()的返回值
MyServiceStub.GetName gn = new MyServiceStub.GetName();//创造一个封装getName的对象
gn.setName(name);//设置参数
System.out.println( stub.getName(gn).get_return());//输出放回值
遇到的一些问题:
问题1: MyService类中包含一个getService方法,想利用对这个方法的不同重载,使其可以同时使用无输入、一个String输入和两个int输入不同方法,结果在浏览器中访问的时候无法访问。
解决方案:不能用重载来实现发布不同方法的功能,编写三个不同的方法来实现不同的功能,分别为:getHello()输出“hello world”,getName(String name)输出“hello $name”,getPlus(int a,int b)输出两数之和“$a+b”。
问题2:用wsdl2java编译生成stub类后,无法再程序中连接。
解决方案:发现我用的axis2为1.53版本,编译生成的stub类中自动生成的地址是https开头,不能正确连接,换为统一版本(1.41)后,自动生成的地址为http开头,经测试,连接成功。
国外主机测评昨天接到Hostigger(现Hostiger)商家邮件推送,称其又推出了一款特价大内存VPS,机房位于土耳其的亚欧交界城市伊斯坦布尔,核50G SSD硬盘200Mbps带宽不限月流量只要$59/年。 最近一次分享的促销信息还是5月底,当时商家推出的是同机房同配置的大内存VPS,价格是$59.99/年,不过内存只有10G,虽然同样是大内存,但想必这次商家给出16G,价格却是$59/年,...
LOCVPS发来了新的洛杉矶CN2线路主机上线通知,基于KVM架构,目前可与香港云地、香港邦联机房XEN架构主机一起适用7折优惠码,优惠后最低美国洛杉矶CN2线路KVM架构2GB内存套餐月付38.5元起。LOCPVS是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。...
今天上午有网友在群里聊到是不是有新注册域名的海外域名商家的优惠活动。如果我们并非一定要在国外注册域名的话,最近年中促销期间,国内的服务商优惠力度还是比较大的,以前我们可能较多选择海外域名商家注册域名在于海外商家便宜,如今这几年国内的商家价格也不贵的。比如在前一段时间有分享到几个商家的年中活动:1、DNSPOD域名欢购活动 - 提供域名抢购活动、DNS解析折扣、SSL证书活动2、难得再次关注新网商家...