webservice三要素:
SOAP:简单对象访问协议,客户端和服务端通信的协议,soap=xml+http
WSDL:web服务描述语言与结构分析,基于xml,用于描述web服务的参数,方法和返回值
UDDI:统一描述、发现和集成,通过soap协议进行通讯。
webservice规范
三种规范分别是JAX-WS、JAXM&SAAJ、JAX-RS(Restful风格)。
开发过程中涉及到的依赖
<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.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.1.12</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.4.5</version>
</dependency>
服务端实现,基于JAX-WS
以简单的天气查询为例
-
编写一个接口
package cn.pdsu.server; import javax.jws.WebService; @WebService public interface IWeatherService { public String query(String cityname); }
-
编写接口实现类
package cn.pdsu.server; public class WeatherServiceImpl implements IWeatherService{ @Override public String query(String cityname) { return "晴天"; } }
-
编写发布类
package cn.pdsu.publish; import cn.pdsu.server.IWeatherService; import cn.pdsu.server.WeatherServiceImpl; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class Publish { public static void main(String[] args) { //创建一个服务工厂 JaxWsServerFactoryBean factory=new JaxWsServerFactoryBean(); //设置服务地址 factory.setAddress("http://localhost:8080/weather"); //设置服务接口 factory.setServiceClass(IWeatherService.class); factory.setServiceBean(new WeatherServiceImpl()); //发布 factory.create(); System.out.println("发布成功"); } }
客户端实现,基于JAX-WS
-
根据服务端提供的地址,找到wsdl地址,利用wsdl2java -d . wsdl地址命令生成客户端代码
-
编写客户端调用服务类
package cn.pdsu.client; import cn.pdsu.server.IWeatherService; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; public class Client { public static void main(String[] args) { //此处是代理工厂,和服务端不一样 JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean(); //设置访问地址 factory.setAddress("http://localhost:8080/weather"); //设置接口类型 factory.setServiceClass(IWeatherService.class); //获取接口代理对象 IWeatherService service = factory.create(IWeatherService.class); //调用接口方法 String query=service.query("上海"); System.out.println(query); //结果为晴天 } }
-