版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jqc874789596/article/details/89445219
很长一段时间没更新博客了,最近刚跳槽成功,工作也慢慢稳定下来了,后面也会陆陆续续更新。
现在的公司用到了WebService,以前没用过,所以学习一下记录下来。
什么是WebService?
首先附上百度百科地址:WebService
简而言之,WebService是一种跨语言跨平台的远程调用技术。我们知道,在我们的日常web开发中,都是我们自己开发接口,自己去调这些接口,但是有种情况:接口不是我们写的,是第三方提供的,我们需要去调其它平台上其它语言的接口,我们就可以用WebService去实现。比如天气预报接口,我们完全可以去调用第三方天气预报接口来完成我们的业务需求。
关于WebService你必须要了解的一些东西?
除了上面的“什么是WebService”,你必须还要了解下面3样东西
- XML:是一种可扩展编译语言,是SOAP传递数据的基础。
- SOAP:简单对象访问协议,它是WebService的通讯协议。具体的解释,就是当WebService通过http请求数据与响应信息时,将请求内容与响应内容通过XML格式将数据进行格式化封装并且加上了特定的消息头,这就是SOAP协议。SOAP = http协议+XML数据
- WSDL:本质上是XML文档,它一般由开发工具自动生成,它描述了WebService接口信息,比如入参,出参,接口名称等等,当我们需要调用第三方WebService接口时,我们必须要知道WebService的WSDL地址。WebService可以有两种方式来暴露他的WSDL地址:第一种.注册到UDDI中,以便被人查找;第二种.直接告诉调用者地址。
开始我们的天气预报demo
先上程序启动类
public class WeatherForecastService {
public static void main(String[] args) throws RemoteException, ServiceException {
System.out.println("======程序启动======");
String result[] = QueryWeatherForecastInfo("杭州");
for (String r : result)
System.out.println(r);
System.out.println("======程序结束======");
}
public static String[] QueryWeatherForecastInfo(String cityName) throws RemoteException, ServiceException {
String[] arr = {};
return arr;
}
}
上面的代码片段中,QueryWeatherForecastInfo是我们主要用来调用第三方接口的方法,这里为了演示不报错,暂时返回个空的String数组。
第三方天气预报WebService接口WSDL地址(网上有很多,不一定用我举例的这个):
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
打开以后,看到的信息即是WSDL文档对webservice接口的说明信息。
将网页上的文本信息拷贝下来,去掉黑色字体(无用的),如下图。
保存成一个.wsdl格式的文件
将这个.wsdl文件拷贝到我们的src目录下
右键此文件,Web Service -- > Generate Client
我们会看到自动给我们生成了很多的代码。
我们只需要调其中我们需要的方法就行了。
代码如下:
public class WeatherForecastService {
public static void main(String[] args) throws RemoteException, ServiceException {
System.out.println("======程序启动======");
String result[] = QueryWeatherForecastInfo("杭州");
for (String r : result)
System.out.println(r);
System.out.println("======程序结束======");
}
public static String[] QueryWeatherForecastInfo(String cityName) throws RemoteException, ServiceException {
WeatherWebServiceLocator locator = new WeatherWebServiceLocator();
// 调用xxLocator对象的getXXPort()方法生成xxSoapBindingStub对象
WeatherWebServiceSoapStub stud = (WeatherWebServiceSoapStub) locator.getWeatherWebServiceSoap();
// 输出当天的天气状况
String[] weather = stud.getWeatherbyCityName("杭州");
return weather;
}
}
运行一下,输出如下:
至此,一个调用第三方接口的WebService的demo就完成了