第一步:创建SEI(ServiceEndpoint Interface)接口,本质上就是Java接口
packagecn.itcast.ws.jaxws.ws;
/**
* SEI接口
* @author wujinxing
*
*/
publicinterface Weatherinterface {
public String queryWeather(String cityName);
}
第二步:创建SEI实现类,在实现类上加入@WebService
package cn.itcast.ws.jaxws.ws;
import javax.jws.WebService;
/**
* SEI实现类
* @author wujinxing
*
*/
@WebService //@WebService表示该类是一个服务类,需要发布其中的public的方法
public class WeatherServiceImpl implements Weatherinterface {
@Override
public String queryWeather(String cityName) {
System.out.println("from client..."+cityName);
String weather = "晴";
return weather;
}
}
第三步:发布服务,Endpoint发布服务,publish方法,两个参数:1.服务地址;2.服务实现类
package cn.itcast.ws.jaxws.ws;
import javax.xml.ws.Endpoint;
/**
* 天气服务端
* @author wujinxing
*
*/
public class WeatherServer {
public static void main(String[] args) {
//Endpoint发布服务
//参数解释:
//1.address - 服务地址
//2.implementor - 实现类 Endpoint.publish(address, implementor);
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherServiceImpl());
}
}
第四步:测试服务是否发布成功,通过阅读使用说明书,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功。
WSDL地址:服务地址+”?wsdl”
WSDL阅读方式:从下往上
客户端:
第一步:wsimport命令生成客户端代码
cmd命令行找到项目文件夹
wsimport -s . http://127.0.0.1:12345/weather?wsdl
第二步:根据使用说明书,使用客户端代码调用服务端
第一步:创建服务视图,视图是从service标签的name属性获取
第二步:获取服务实现类,实现类从portType的name属性获取
第三步:获取查询方法,从portType的operation标签获取
package cn.itcast.ws.jaxws.ws.client;
import cn.itcast.ws.jaxws.ws.WeatherServiceImpl;
import cn.itcast.ws.jaxws.ws.WeatherServiceImplService;
/**
*
* 天气查询客户端
* @author wujinxing
*
*/
public class WeatherClient {
public static void main(String[] args) {
//创建服务视图
WeatherServiceImplService weatherServiceImplService = new WeatherServiceImplService();
//获取服务实现类
WeatherServiceImpl weatherServiceImpl = weatherServiceImplService.getPort(WeatherServiceImpl.class);
//调用查询方法
String weather = weatherServiceImpl.queryWeather("北京");
System.out.println(weather);
}
}
结果:
客户端
服务端
优点:
l 发送方式采用http的post发送,http的默认端口是80,防火墙默认不拦截80,所以跨防火墙
l 采用XML格式封装数据,XML是跨平台的,所以webservice也可以跨平台。
l Webservice支持面向对象
缺点:
l 采用XML格式封装数据,所以在传输过程中,要传输额外的标签,随着SOAP协议的不断完善,标签越来越大,导致webservice性能下降
易于复用
l 发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice
l 服务端已经确定使用webservice,客户端不能选择,必须使用webservice
l 考虑性能时不建议使用webservice
l 同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据