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) {
WeatherServiceImplService weatherServiceImplService = new WeatherServiceImplService();
WeatherServiceImpl serviceImpl = weatherServiceImplService.getPort(WeatherServiceImpl.class);
String result = serviceImpl.query("深圳");
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);
}
关于服务调用失败错误
天气预报 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 放在第一行,不允许有空 调用成功
|