1、先来介绍一下什么是web service
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。 [1]
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
2、
在JDK的bin文件夹中,有一个wsimport.exe工具,可依据wsdl文件生成相应的类文件,将生存在本地这些类文件拷贝到需要使用的项目中,就可以像调用本地的类一样调用webService提供的方法。该工具可以用于非Java的服务器,如用C#编写的WebService,通过wsimport则生成Java的客户端实现。
-keep:是否生成java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
首先推荐一个网站:http://www.webxml.com.cn/zh_cn/web_services.aspx?offset=1
注意:.asmx网址说明了调用的方法、输入参数、返回数据,.wsdl是我们要用来生成代码的网址。
这上面你可以调用别人写好的服务。这里我们使用两个实例简单演示一下:手机号归属地查询和天气预告查询。
<1>首先点击这个
<2>打开cmd 新建一个目录,进入该目录
<3>使用命令
wsimport -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
这样代码就下载到我们新建的目录下面了。
复制生成的代码,新建一个java工程
<3>编写一个测试类test.java
public class test {
public static void main(String[] args) {
MobileCodeWS ms = new MobileCodeWS();
MobileCodeWSSoap mobileCodeWSSoap = ms.getMobileCodeWSSoap();
//此处填写手机号
String mobileCodeInfo = mobileCodeWSSoap.getMobileCodeInfo("137854309", null);
System.out.println(mobileCodeInfo);
}
}
运行即可查询出来,怎么样简单吧,下面来个天气预报的演示。
和上面不同的是直接使用wsimport 通过该地址生成Java文件时,会报错。因为该wsdl里面包含 ref = “s:schema” 这样的引用。而jaxb是不支持的。所以需要手动将该wsdl下载下来做下修改,然后再生成java文件。
(1) 将页面另存为
(2) 将所有的
<s:element ref="s:schema" />
<s:any />
改成 ,一共有三处需要修改
建议查找,修改时把也要删掉。
(3) 运行命令:
注意:路径是我们本地的路径
(4)生成代码后同样新建一个工程,然后复制代码过去(注意:完整的包都要复制过去,不然会有问题)
(5) 到这里后还需要修改一个地方:
WeatherWS.java 文件中的 这个地方的本地路径要修改成
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
(6) 编写测试类
package com.cn.weather;
import java.util.List;
public class WeatherWsClient {
public static void main(String[] args) {
//创建一个WeatherWS工厂
WeatherWS factory = new WeatherWS();
//根据工厂创建一个WeatherWSSoap对象
WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();
//调用WebService提供的getWeather方法获取南宁市的天气预报情况
ArrayOfString weatherInfo = weatherWSSoap.getWeather("新乡", null);
List<String> lstWeatherInfo = weatherInfo.getString();
//遍历天气预报信息
for (String string : lstWeatherInfo) {
System.out.println(string);
System.out.println("------------------------");
}
//获得中国省份、直辖市、地区和与之对应的ID
ArrayOfString s = weatherWSSoap.getRegionProvince();
List<String> list = s.getString();
for (String string : list) {
System.out.println(string);
System.out.println("------------------------");
}
}
结果如下: