WebService学习总结(三)--调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取电子邮箱验证和查询火车时刻表和天气预报为例进行说明。
一、调用WebService验证 Email 地址是否正确
1.1、找到提供Email验证的Webservice的网络地址
http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx访问如图所示:

找到WebService的wsdl描述,通过URL地址http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl:如下:

1.2、客户端编码方式访问第三方提供的webService服务
1、借助wsimport命令工具自动生成客户端代码
创建一个测试项目,如下:

打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl"生成客户端代码,如下图所示:

生成的代码如下:

借助生成的代码编写请求代码
package cn.com.emailWsClient; import cn.com.webxml.ValidateEmailWebService;
import cn.com.webxml.ValidateEmailWebServiceSoap; public class EmailWsClient {
public static void main(String[] args) {
//创建ValidateEmailWebService工厂
ValidateEmailWebService factory = new ValidateEmailWebService();
//创建ValidateEmailWebServiceSoap对象
ValidateEmailWebServiceSoap emailInfo = factory.getValidateEmailWebServiceSoap(); String email = "myl@163.com";
//调用Email验证方法
//,
/**
* 输入参数:EmailAddress = Email 地址(默认SMTP端口25)
* 返回数据: Byte 字节。
* 返回值:
* 0 = 请重新验证;
* 1 = 邮件地址合法;
* 2 = 只是域名正确;
* 3 = 一个未知错误;
* 4 = 邮件服务器没有找到;
* 5 = 电子邮件地址错误;
* 6 = 免费用户验证超过数量(50次/24小时);
* 7 = 商业用户不能通过验证
*
*/
int emaileResult = emailInfo.validateEmailAddress(email);
switch (emaileResult) {
case 0:
System.out.println("重新验证");
break;
case 1:
System.out.println("邮件地址合法");
break;
case 2:
System.out.println("只是域名正确");
break;
case 3:
System.out.println("一个未知错误");
break;
case 4:
System.out.println("邮件服务器没有找到");
break;
case 5:
System.out.println("电子邮件地址错误");
break;
case 6:
System.out.println("免费用户验证超过数量(50次/24小时)");
break;
case 7:
System.out.println("商业用户不能通过验证");
break;
default:
break;
} }
}
测试多个Email地址,返回值




这样,我们通过生成的Client代码调用了第三方提供的webService服务获取email是否通过验证。
二、 调用免费的web service查询国内火车时刻表
2.1、找到提供服务的Webservice的网络地址
http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx如图所示:

找到WebService的wsdl描述信息,通过URL地址http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl:如下:

2.2、编写客户端访问调用WebService服务
1、创建客户端项目(如例1)

2、根据WebService的wsdl描述生成客户端代码
打开命令行窗口,切换到Phone_Client的src目录,执行wsimport -keep http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl 如下图所示:

运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:
1、将对应的wsdl文档保存到本地(Ctrl+s)

2、修改wsdl文档的部分内容:将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
替换成 
根据刚刚保存到本地的wsdl文件生成代码,如下图所示:

从执行结果显示,这一次可以正常生成代码了,刷新一下src目录,就可以看到生成的代码了,如下图所示:

2、借助生成的代码编写请求代码
package cn.com.TrainTimeClient; import java.util.Date;
import java.util.List; import cn.com.webxml.ArrayOfString;
import cn.com.webxml.GetStationNameDataSetResponse.GetStationNameDataSetResult;
import cn.com.webxml.TrainTimeWebService;
import cn.com.webxml.TrainTimeWebServiceSoap;
/**
*
* @author myl
* @version 2018.4.15
* 火车时刻表 WEB 服务 (第六次提速最新列车时刻表)
*/
public class TrinTimeClient { public static void main(String[] args) {
//创建TrainTimeWebService工厂
TrainTimeWebService factory = new TrainTimeWebService();
//创建TrainTimeWebServiceSoap对象
TrainTimeWebServiceSoap trainInfo = factory.getTrainTimeWebServiceSoap();
//获得本火车时刻表Web Services的全部始发站名称
ArrayOfString trainResult = trainInfo.getStationName();
List<String> listTrain = trainResult.getString();
for(String train : listTrain){
System.out.println(train);
}
//获得本火车时刻表Web Services的数据库版本更新时间
String date = trainInfo.getVersionTime();
System.out.println(date); //获得本火车时刻表Web Services支持的全部站台名称和拼音缩写 DataSet
GetStationNameDataSetResult dataSet = trainInfo.getStationNameDataSet();
List<Object> listds = dataSet.getAny();
for(Object ds : listds){
System.out.println(ds.toString());
}
}
}
返回值

这样,我们通过生成的Client代码调用了第三方提供的webService服务获取火车时刻表的一些信息。
三、调用免费的web service获取天气预报信息
3.1、找到提供天气预报信息的Webservice的网络地址
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx访问结果如下图所示:

找到WebService的wsdl描述,通过URL地址http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl:如下:

3.2、客户端编码方式访问第三方提供的webService服务
1、借助wsimport命令工具自动生成客户端代码
创建一个测试项目,如下:

打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"生成客户端代码,如下图所示:

运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:
1、将对应的wsdl文档保存到本地(Ctrl+s)

2、修改wsdl文档的部分内容:将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
替换成 
根据刚刚保存到本地的wsdl文件生成代码,如下图所示:

从执行结果显示,这一次可以正常生成代码了,刷新一下src目录,就可以看到生成的代码了,如下图所示

2、借助生成的代码编写客户端请求代码
package cn.com.client; import java.util.List;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWebService;
import cn.com.webxml.WeatherWebServiceSoap; /**
*
* @author myl
* @version 2018.4.15
*
*/
public class WeatherWSClient { public static void main(String[] args) {
//创建WeatherWebService工厂
WeatherWebService factory = new WeatherWebService();
//创建WeatherWebServiceSoap对象
WeatherWebServiceSoap weatherInfo = factory.getWeatherWebServiceSoap();
//根据地区获取天气情况
ArrayOfString weatherResult = weatherInfo.getWeatherbyCityName("北京");
//ArrayOfString 保存转化为List对象
List<String> listWeather = weatherResult.getString();
for(String weather : listWeather){
System.out.println(weather);
}
} }
返回结果:

这样,我们通过生成的Client代码调用了第三方提供的webService服务获取到了南宁市的天气预报信息。
WebService学习总结(三)--调用第三方提供的webService服务的更多相关文章
- WebService学习总结(四)——调用第三方提供的webService服务
http://www.cnblogs.com/xdp-gacl/p/4260627.html 互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他 ...
- WebService学习--(四)调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...
- WebService学习总结——调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据. 气象中心的管理系统将收 ...
- 【WebService】调用第三方提供的webService服务(七)
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...
- WebService-调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...
- 延迟调用或多次调用第三方的Web API服务
当我们调用第三方的Web API服务的时候,不一定每次都是成功的.这时候,我们可能会再多尝试几次,也有可能延迟一段时间再去尝试调用服务. Task的静态方法Delay允许我们延迟执行某个Task,此方 ...
- 调用别人提供的WebService
在开发过程中,许多时候需要使用到别人提供的WebService接口,使用其中的方法. 在调用别人提供的接口时,会得到接口使用的文档,其中包括接口的网络地址及方法作用等. 找到WebService的ws ...
- WebService学习总结(三)——使用JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- 根据第三方提供的webservice地址获取文件信息
import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.en ...
随机推荐
- <textarea></textarea>标签的placeholder属性不生效问题
<textarea></textarea>标签的placeholder属性不生效问题 1.在用到<textarea></textarea>标签时,设 ...
- 获取不到自定义的request的header属性
java获取headers的代码如下: // 获取http-header里面对应的签名信息 Enumeration<?> headerNames = request.getHeaderNa ...
- mongoose基础使用
mongoose与mongodb 首先,要明确mongoose和mongodb是什么? mongodb是一种文档数据库:而mongoose是一种能在node环境中优雅地操作mongodb的对象模型工具 ...
- openssl查看证书命令
openssl x509部分命令打印出证书的内容:openssl x509 -in cert.pem -noout -text打印出证书的系列号openssl x509 -in cert.pem -n ...
- http request 请求拦截器,有token值则配置上token值
// http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...
- Android菜鸟进字节跳动,居然是看了这个......
谈谈我的真实感受吧- 程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了. 金三银四.金九银十跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光. ...
- 可怕!字节跳动大牛爆出的“Android进阶指南”,强到无法形容,GitHub已标星“8.5k”!
前言 从去年8月份开始,我开始重新找工作,在这期间刷了不少面试题和大牛博客,无意中薅到一份字节跳动大牛整理的一份"Android进阶指南",包含Android面试常见问题.主流技术 ...
- Python正则表达式re库的初次使用入门
正则表达式常用操作符: 操作符 说明 实例 . 表示任何单个字符,不包括换行符 [] 字符集,对单个字符给出取值范围 [abc]表示a.b.c,[a-z]表示a到z单个字符 [^ ] 非字符集 [^a ...
- [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
[论文阅读] LCC-NLM(局部颜色校正, 非线性mask) 文章: Local color correction using non-linear masking 1. 算法原理 如下图所示为, ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...