WebService 简介
WebService 是通过SOAP在 Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。WebService是一种跨编程语言和跨操作系统平台的远程调用系统。
实战操作
发布一个WebService 接口
目录结构
IWeatherService
public interface IWeatherService {
public String query(String city);
}
WeatherServiceImpl
@WebService
public class WeatherServiceImpl implements IWeatherService{
@Override
public String query(String city) {
System.out.println("查询"+city);
return "好天气";
}
}
Main
public class Main {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8081/weatherService", new WeatherServiceImpl());
System.out.println("发布成功");
}
}
调用查看
http://localhost:8081/weatherService?wsdl
客户端
通过wsimport命令生成客户端代码(通过cmd进入到当前项目的src路径下,wsimport.exe命令是在jdk 的bin目录下)
第一种调用方式
新建空项目weatherClient_1
进入到src目录下
wsimport -s . http://localhost:8081/weatherService?wsdl
自动生成
新建MainClient.java
public static void main(String[] args) {
//客户端调用第一种方式
// 1.创建服务视图(视图是从service标签的name属性获取)
WeatherServiceImplService weatherServiceImplService = new WeatherServiceImplService();
//2.获取服务实现类(实现类从portType的name属性获取)
WeatherServiceImpl serviceImpl = weatherServiceImplService.getPort(WeatherServiceImpl.class);
//3.调用方法(从portType的operation标签获取―)
String result = serviceImpl.query("深圳");
//4.输出服务端返回的结果
System.out.println(result);
}
第二种调用方式
public static void main(String[] args) throws MalformedURLException {
URL url = url = new URL("http://localhost:8081/weatherService?wsdl");
QName qname = new QName("http://weather.com.cn/", "WeatherServiceImplService");
Service service = Service.create(url, qname);
WeatherServiceImpl port = service.getPort(WeatherServiceImpl.class);
String aString = port.query("北京");
System.out.println(aString);
}
webservice提供的接口
关于服务调用失败错误
天气预报
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
- 新建空项目
- 生成代码时报错
1,问题: java 调用.NET生成的webservice,会出现这个问题生成客户端代码报错
2,解决方案:因为这个服务是.NET开发的,所以我们在这一块要访问需要将wsdl的描述文件保存到本地,然后做一些更改
3、将wsdl_文件中的
<s:element ref=“s:schema”/><s:any />
修改为
<s:any minOccurs=“2” maxOccurs=“2”/>
之后,以绝对路径的方式来生成对应的客户端代码即可
4、将wsdl描述保存到本地:右键查看源代码复制,本地新建weather.wsdl 粘贴进去
注意:<?xml 放在第一行,不允许有空
调用成功
通过Linux生成webservice 客户端代码
- 执行wget命令,下载wsdl文件
wget URL链接 --http-user=用户名 --http-passwd=密码
- 将wsdl文件传到Windows系统用cmd生成
wsimport -s . E:\文件名