一、简介
Apache CXF = Celtix + xFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用
二、使用
导入相应的jar包
接口
@WebService(serviceName="phoneUsersService")
public interface PhoneUsersService {
public @WebResult(name="phones")String get(@WebParam(name="position")int position) ;
}
实现类
public class PhoneUsersServiceImpl implements PhoneUsersService {
@Override
public String get(int position) {
String phoneOs = null ;
if(position==1){
phoneOs = "android" ;
}else if(position==2){
phoneOs = "ios" ;
}else{
phoneOs = "wondows" ;
}
return phoneOs;
}
}
测试:
- ServerFactoryBean
* - 不设置注解也可以发布webservice服务, 不支持注解
* - 不支持拦截器的添加public class Test { /** * @param args */ public static void main(String[] args) { PhoneUsersService phoneUsersService = new PhoneUsersServiceImpl() ; ServerFactoryBean bean = new ServerFactoryBean() ; bean.setAddress("http://10.216.43.149:6666/ws/cxf/phoneUsersService"); bean.setServiceClass(PhoneUsersService.class); //对外提供webservcie的业务类或者接口 bean.setServiceBean(phoneUsersService); //服务的实现bean bean.create(); //创建,发布webservice System.out.println("wsdl地址:http://10.216.43.149:6666/ws/cxf/phoneUsersService?WSDL"); } }
- JaxWsServerFactoryBean
* - 支持注解
* - 可以添加拦截器public class Test { /** * @param args */ public static void main(String[] args) { PhoneUsersService phoneUsersService = new PhoneUsersServiceImpl() ; JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean(); //Endpoint :地址 , 实现对象 bean.setAddress("http://10.216.43.149:5555/ws/cxf/languangeService"); bean.setServiceClass(PhoneUsersService.class);//对外提供webservcie的业务类或者接口 bean.setServiceBean(phoneUsersService);//服务的实现bean //添加输入拦截器 :输入显示日志信息的拦截器 bean.getInInterceptors().add(new LoggingInInterceptor()); //添加输出拦截器 :输出显示日志信息的拦截器 bean.getOutInterceptors().add(new LoggingOutInterceptor()); bean.create();//创建,发布webservice System.out.println("wsdl地址:http://10.216.43.149:5555/ws/cxf/languangeService?WSDL"); } }
以上就是用cxf发布服务的两种方式,推荐使用第二种,它不仅可以使用注解来控制参数及服务的名称,而且还可以添加拦截器。