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 ...
随机推荐
- solr(CVE-2019-17558)远程命令执行
影响版本 Apache Solr 5.x到8.2.0版本 测试 https://github.com/jas502n/CVE-2019-0193
- Sunset靶机
仅供个人娱乐 靶机信息 https://www.vulnhub.com/entry/sunset-sunrise,406/ 一.主机探测 二.信息收集 nmap -sS -sV -T5 -A -p- ...
- 苹果手机点击输入框input 页面放大 超出屏幕问题
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale ...
- user-agent随笔
常用的user-agent: 一.pc端的user-agent汇总,各大浏览器 1.safari 5.1 – MAC Mozilla/5.0 (Macintosh; U; Intel Mac OS X ...
- 本以为精通Android事件分发机制,没想到被面试官问懵了
文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...
- Spring Cloud Alibaba - Spring Cloud Stream 整合 RocketMQ
Spring Cloud Stream 简介 在微服务的开发过程中,可能会经常用到消息中间件,通过消息中间件在服务与服务之间传递消息,不管你使用的是哪款消息中间件,比如RabbitMQ.Kafka和R ...
- C++小知识——显示VS大括号/花括号折叠按钮
这个功能默认是关闭的,打开路径如下: 将大纲语句块改为"True" 这个功能其实很有必要真不知道为啥默认要关闭这个功能. 站在巨人的肩膀上的思想,其实已经在互联网程序员之间深入人心 ...
- 清理docker常用命令
0.查看docker占用空间docker system df1.一键删除所有已经停止的容器 docker container prune 2.删除所有容器(包含停止的 正在运行的) docker rm ...
- MySQL数据类型 储存引擎
存储引擎 日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...) 针对不同的数据应该对应着不同的处理机制来存储 存储引擎就是不同的处 ...
- 终于讲清楚了:深入理解Java 应用程序中 final 关键字的各种使用场景
在 Java 语言众多的关键字中,final 关键字无疑是被提到最多的,也是在面试过程中经常被问到的知识点.今天,老王查找了很多材料,最后终于收集了关于 final 关键字比较全的知识点.首先,fin ...