likes
comments
collection
share

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

作者站长头像
站长
· 阅读数 20

前言

在上一篇文章中,壹哥带大家学习了如何实现在SpringBoot中,利用Web Service实现RPC进程间通信。接下来在本章节中,壹哥会继续带大家利用远程通信技术,实现在自己的项目中,获取第三方网站中的天气信息。

一. 第三方天气信息网站

1. 天气信息网站

我们可以在如下地址获取天气信息: www.webxml.com.cn/zh_cn/index…

上面的网站提供了获取天气预报的服务接口,虽然这个网站比较古老,但里面除了可以得到天气信息外,还可以获取手机号码归属地查询,车次查询等信息,其提供的接口还是比较多的。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

2. 天气信息接口

我们获取天气信息接口的具体地址是这个: ws.webxml.com.cn/WebServices… SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

所以我们接下来只要解析该WSDL服务接口就可以获取到天气信息了。

3. 安装配置apache-cxf

为了能够解析Web Service里的XML文件,我们需要有一个apache-cxf软件。

3.1 下载apache-cxf

我们可以在如下地址下载apache-cxf软件。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

3.2 解压安装apache-cxf

然后我们就把下载好的软件解压,解压后就可以直接用,这是绿色免安装版,也是apache软件的特色。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

3.3 配置环境变量

为了方便我们使用该软件,最好还是对其配置环境变量。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

3.4 测试apache-cxf

环境变量配置好之后,我们测试一下是否可用。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

二. 获取天气信息实现步骤

  • 寻找Web Service服务获得wsdl;
  • 根据wsdl生成接口;
  • 编写接口程序;
  • 将接口文件打包。

1. 获得wsdl

第三方网址: www.webxml.com.cn/zh_cn/index…

天气接口: ws.webxml.com.cn/WebServices…

2. 创建.wsdl文件

2.1 首先我们打开网址

ws.webxml.com.cn/WebServices… SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

2.2 创建一个文本文件

然后我们在任意目录下,创建一个文本文件:

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

2.3 复制xml文件内容

打开文件,把天气网站的所有文字复制粘贴到这个文件中。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

复制到文本文件中。

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
...
...
...
</wsdl:definitions>

2.4 删除修改文本文件中的部分标签

接着,到这个文件中,Ctrl+F,把"<s:element ref="s:schema"/>"标签全部删除。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

还要把 替换为&nbsp; SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

2.5 将文本文件改成.wsdl文件

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

3. 利用命令根据wsdl文件生成接口

接下来我们利用之前安装的Apache CXF里的wsdl2java命令或者wsimport命令来生成获取天气信息的接口。

3.1 方式一:利用wsimport命令生成

在上面创建的目录下,在命令行中输入命令:

wsimport -keep weather.wsdl

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

就会生成一堆java文件。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

注:

如果发生以下提示(wsimport 不是内部或外部命令,也不是可运行的程序或批处理文件).

解决方法,参考文章: blog.csdn.net/jiudihanbin…

3.2 方式二:利用wsdl2java命令创建

在cmd命令行中运行wsdl2java命令。

wsdl2java  F:\WeatherTarget\src\weather.wsdl

也可以生成同样的java文件。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

4. 创建Web项目

接下来我们先创建一个Web项目。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

4.1 添加依赖包

添加必要的依赖包。

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.12</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.1.12</version>
</dependency>

4.2 把上面自动创建出的所有java类复制到项目中

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

4.3 把weather.wsdl文件复制到resource目录下

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

4.4 修改要加载的配置文件路径

将WeatherWS类中的一行代码。

url = new URL("file:weather.wsdl");

修改为:

url = new URL("classpath:/weather.wsdl");

否则运行时可能会导致FileNotFoundException。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

5. 创建Controller类接口

这里再创建一个Controller,定义若干接口。

package com.yyg.boot.weather.web;

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/5/10
 * @Description Description
 */
@Slf4j
@RestController
public class WeatherController {

    @GetMapping("/weather")
    public List<String> getWeather() {
        WeatherWSSoap weatherWSSoap = new WeatherWS().getWeatherWSSoap();

        //获取国家信息
        ArrayOfString arrayOfString = weatherWSSoap.getRegionCountry();
        List<String> list = arrayOfString.getString();

        for (String result : list) {
            log.warn(result);
        }

        //获取省份
        ArrayOfString arrayOfString1 = weatherWSSoap.getRegionProvince();
        List<String> list1 = arrayOfString1.getString();
        for (String s : list1) {
            log.warn(s);
        }

        //获取城市-北京
        ArrayOfString arrayOfString2 = weatherWSSoap.getSupportCityString("311101");
        List<String> list2 = arrayOfString2.getString();
        for (String s : list2) {
            log.warn(s);
        }

        //注意:获取天气需要账号userid,每天可以免费试用5次,随便注册一个账号测试就可以。
        ArrayOfString arrayOfString3 = weatherWSSoap.getWeather("上海", "自己的userid");
        List<String> list3 = arrayOfString3.getString();
        for (String s : list3) {
            log.warn(s);
        }

        return list3;
    }

}

如果没有输入用户userid,则会保存异常信息: SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

注意:

获取某个城市的天气信息时,需要获取账号userid,每天可以免费试用5次,随便注册一个账号测试就可以。 www.webxml.com.cn/zh_cn/index…

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

注册登录该网站后,进入到后台,需要先开启试用功能,默认是没有开启的,否则即使注册了账号,输入了userid也无法获取到天气信息。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

6. 创建入口类

最后创建项目的入口类,启动项目。

package com.yyg.boot.weather;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author 一一哥Sun
 * @Date Created in 2020/5/10
 * @Description Description
 */
@SpringBootApplication
public class WeatherClientApplication {

    public static void main(String[] args){
        SpringApplication.run(WeatherClientApplication.class,args);
    }

}

7. 启动项目测试

启动项目后,就可以看到我们已经成功的获取到了天气信息,只要适当的进行xml解析,把天气信息渲染到我们自己的网站上就可以了。 SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

8. 完整项目结构

完整的项目结构如下图所示,大家可以参考创建。

SpringBoot2.x系列教程50--SpringBoot整合Web Service获取当日天气信息

结语

至此,我们就从第三方网址上获取到了天气信息,然后就可以在自己的网站或其他项目中对用户展示天气信息了,是不是很666呢。看了这么炫酷的Java技术,是不是应该给壹哥来个大大的赞啊。

转载自:https://juejin.cn/post/7176769449670737979
评论
请登录