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 ...
随机推荐
- 大数据学习(19)—— Flume环境搭建
系统要求 Java1.8或以上 内存要足够大 硬盘足够大 Agent对源和目的要有读写权限 Flume部署 我这8G内存的电脑之前搭建Hadoop.Hive和HBase已经苟延残喘了,怀疑会卡死,硬着 ...
- 一文带你认识LPWA通信技术
摘要:为了满足越来越多的远距离物联网设备的连接需求,LPWA应用而生. 本文分享自华为云社区<常见物联网通信技术之LPWA通信技术>,作者:爱吃面包的猫. 如果你比较关注物联网圈的话,想必 ...
- 将几张图片合并为一张图片,返回byte数组
需求:通过url数组下载图片,再竖直合成一张新的图片,具体java代码如下 1 /** 2 * 竖直合并图片 3 * 4 * @param urls 5 * @return 6 */ 7 public ...
- Mybatis学习笔记-CRUD
namespace namesapce中的包名需与Dao/Mapper接口的包名一致 SELCET 选择,查询语句 id:对应namespace中的方法: resultType:Sql语句执行的返回值 ...
- 安装Linux的步骤 包含linux下安装jdk,及mysql
https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 镜像下载网址,4G 左右. 安装VMware 15版本 一路下一步, ...
- 1~n数字中1出现的个数
1~n数字中1出现的个数 LeetCode 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 感觉挺有意思 对于一个数,我们先局部分析一下,比如123456,我们考虑百位这个 ...
- PostgreSQL 时间转换
背景:最近频繁使用到时间转换相关的操作,特此小记. 1.实时取最近24小时内数据. select now() - interval '24h'; 通过sql获得符合要求的时间段,当做where条件即可 ...
- 常见web中间件漏洞(五)weblogic漏洞
继续整理有关中间件漏洞思路(仅做简单思路整理,不是复现,复现请参考大佬们的长篇好文,会在文章中列举部分操作) WebLogic是Oracle公司出品的一个application server,确切的说 ...
- HTTP头参数详解及其中的危险
一.重要的头参数 user_agent 发出请求的用户信息 X-Forwarded-For 表示 HTTP 请求端真实 IP(格式:X-Forwarded-For: client, proxy1, p ...
- msfvenom简介
写此文是因为网上资料杂乱,不方便查阅,辣眼睛 测试免杀的时候刚好用到这个功能,顺便写一下(0202年靠msfvenom生成的纯原生payload可以宣告死亡了,如果有查不出来的杀软可以退群了,这也叫杀 ...