网上有很多类似webservice的一些教程,但感觉都不太实用,哪怕你把helloworld写再优雅,再深奥,到了实际商业应用,还是会有各种各样的问题。这里清风讲一下webservice的客户端开发
工作上设计到webservice的开发,多半是调用三方的webservice服务。好了,废话不多说,进入正题
我们以这个查询电话归属地为例来进行讲解,如何调他的服务,来获取我们需要的信息
http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx
(PS.目前这个webservice是免费并且可用的,可能别人会收费,可能会撤服务,如果真是这样,大家可以换一个,网上这类服务也不少)
编码webservice代码,首先需要拿到服务端的wsdl文件,何为wsdl文件,这个大家百度吧,这里就不说了。
一般服务的wsdl文件,都是在服务链接的后面加上“?wsdl”,以我们这个demo为例,他的wsdl文件就是 http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
生成客户端代码,也封很多种,这里我们讲解比较主流的一种,用cxf来生成
cxf是Apache的顶级项目,下载地址如下:http://cxf.apache.org/download.html
我下的是最新版 apache-cxf-3.0.3-src.zip,大家直接下最新版的,应该也没什么问题
下好了之后,进入apache-cxf-3.0.3\bin目录,可以看到有一个指令是 wsdl2java
在这个目录下,打开命令行,输入指令
wsdl2java -p com.cug.client -encoding utf-8 http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
-p 是指定包名
-encoding 是指定编码方式(主要是针对注释,有的注释是中文,不加的话,就会显示乱码,对代码没影响)
然后接下来就是接上wsdl文件的地址。wsdl文件也可以下载到本地,一样的效果,按自己情况选择
执行完后,就会在当前目录下,生成客户端代码了。
这个包里面,就全是生成好的客户端代码
命名比较规范的服务端,一般你生成好了,会有一个类叫XXXXSoap。这个类就是你需要使用的类,如果没有,那就要自己找找看了(后面我会附上全部代码供大家参考)
接下来就是我们自己的功能代码了,这里我是通过static来进行单例管理。也可以托管给spring管理,这里我不贴出来了,不然spring的配置又一大推,太繁琐了。大家自己google一下,很容易
public class SoapClient {
private static MobileCodeWSSoap soap;
static{
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx");
factory.setServiceClass(MobileCodeWSSoap.class);
soap = (MobileCodeWSSoap) factory.create();
}
public static void main(String[] args) {
String info = soap.getMobileCodeInfo("13512757811", null);
System.out.println(info);
}
}
展示结果截图
OK,说完了,此处该有掌声,代码见附件 webservice.zip
(PS.依赖是maven管理的)