- CXF介绍 :属于soa的框架
- cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache
- CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext
- CXF默认是依赖于Spring的
- Apache CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题
- CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat
2.CXF特点
- 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
- 支持注解的方式来发布webservice
- 能够显示一个webservice的服务列表
- 能够添加拦截器:输入拦截器、输出拦截器 :
输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器
【以下是实现步骤】
【1:创建服务接口】
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(serviceName="languageManager")
public interface LanguageService {
public @WebResult(partName="language")String getLanguage(@WebParam(name = "position")int position);
}
【2 :接口实现】
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class LanguageServiceImpl implements LanguageService {
String language = null;
public String getLanguage(int position) {
switch(position){
case 1:language="java";break;
case 2:language="C";break;
case 3:language="PHP";break;
case 4:language="C#";break;
case 5:language="an";break;
default:break;
}
return language;
}
/**
* 使用ServerFactoryBean方式
* 使用JaxWsServerFactoryBean方式(推荐使用)
* 两种方式的对比:
* 1 : ServerFactoryBean
* - 不设置注解也可以发布webservice服务,不支持注解
* - 不支持拦截器的添加
* 2 : JaxWsServerFactoryBean
* - 支持注释
* - 可以添加拦截器
* 3 : webservice访问步骤:
* 1.检测本地代理描述的wsdl是否与服务端的wsdl一直,俗称握手
* @param args
*/
public static void main(String[] args) {
LanguageService service = new LanguageServiceImpl();
//ServerFactoryBean bean = new ServerFactoryBean();
JaxWsServerFactoryBean bean = new JaxWsServerFactoryBean();
bean.setAddress("http://192.168.1.120:9999/ws/cxf/languageService");
bean.setServiceClass(LanguageService.class);
bean.setServiceBean(service);
//添加输入拦截器:输入显示日志信息的拦截器
bean.getInFaultInterceptors().add(new LoggingInInterceptor());
//添加输出拦截器:输出显示日志信息的拦截器
bean.getOutFaultInterceptors().add(new LoggingOutInterceptor());//拦截器可以不加
bean.create();
System.out.println("WSDL地址: "+bean.getAddress()+"?WSDL");
}
}
【3 :发布服务】
运行实现类所写的main方法,并复制链接查看服务
查看服务:
【4 :利用wsimport生成class文件,并将其打jar包】
命令: wsimport 服务地址
打jar命令:jar cvf langueService.jar ./cn
【5 : 导入生成的jar,写测试demo】
注意:这里在调用测试服务的时候,要将服务打开测试
(服务部打开会造成不能访问)
这里发布服务的方式有两种
1:ServerFactoryBean方式
2:JaxWsServerFactoryBean方式(推荐使用)
/**
* 使用ServerFactoryBean方式
* 使用JaxWsServerFactoryBean方式(推荐使用)
* 两种方式的对比:
* 1 : ServerFactoryBean
* - 不设置注解也可以发布webservice服务,不支持注解
* - 不支持拦截器的添加
* 2 : JaxWsServerFactoryBean
* - 支持注释
* - 可以添加拦截器
* 3 : webservice访问步骤:
* 1.检测本地代理描述的wsdl是否与服务端的wsdl一直,俗称握手
* @param args
*/