CXF的第一个例子
1.4.1编写服务端代码
步骤
- 创建一个java工程
- 导入cxf的jar包
- 只有导入一个cxf-manifest.jar就可以,内部会导入所有jar【IEDA就不要理】
- 创建天气服务接口和实现类
- 在接口上添加@webservice(与jax-ws不同,它是在实现类上添加的)
|
|
发布webservice服务:
使用JaxWsServerFactoryBean 来发布(soap12)
加入拦截器,拦截请求
bean.getInInterceptors().add(new LoggingInInterceptor());
bean.getOutInterceptors().add(new LoggingOutInterceptor());
import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class WeatherServer {
public static void main(String[] args) { //创建服务工厂Bean JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); //设置服务实现对象 factoryBean.setServiceBean(new WeatherIntefaceImpl()); //设置服务发布地址 factoryBean.setAddress("http://127.0.0.1:12345/weather"); //创建服务 factoryBean.create(); } } |
14.2 wsimport生成客户端面代码
命令:wsimport -s . http://127.0.0.1:12345/weather?wsdl
14.3 wsdl2java生成客户端面代码
命令:wsdl2java –d . http://127.0.0.1:12345/weather?wsdl
- wsdl2java在windodw jdk1.8的执行失败原因
- Windodw jdk1.8的版本,使用wsdl2java未能成功
- 因为jre和jdk都用的是jdk8, 而刚好jaxb-xjc-2.2.7对jdk8有这个bug
- 解决办法
|
1.4.4编写客户端代码
掌握两种方式:JAX-WS和CXF的方式
|
package com.gyf.test; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.gyf.weather.WeatherInteface; public class Demo{ public static void main(String[] args) { //创建代理工厂 JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
//设置 服务接口类型 factoryBean.setServiceClass(WeatherInteface.class);
//设置服务器地址 factoryBean.setAddress("http://127.0.0.1:12345/weather?wsdl");
WeatherInteface weather = factoryBean.create(WeatherInteface.class);
System.out.println(weather.queryWeather("北京")); } } |
1.4.5如何生成soap1.2的webservice
只需要在接口上添加BindingType即可,如下图