CXF框架完成webService服务的发布

  1. 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特点
    1. 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
    2. 支持注解的方式来发布webservice
    3. 能够显示一个webservice的服务列表
    4. 能够添加拦截器:输入拦截器、输出拦截器 :
      输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器
      【以下是实现步骤】
      【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方法,并复制链接查看服务

CXF框架完成webService服务的发布_第1张图片
2016-09-02_162935.png

查看服务:

CXF框架完成webService服务的发布_第2张图片
2016-09-02_163129.png

【4 :利用wsimport生成class文件,并将其打jar包】
命令: wsimport 服务地址

CXF框架完成webService服务的发布_第3张图片
2016-09-02_163346.png

打jar命令:jar cvf langueService.jar ./cn

CXF框架完成webService服务的发布_第4张图片
2016-09-02_163836.png

【5 : 导入生成的jar,写测试demo】

CXF框架完成webService服务的发布_第5张图片
2016-09-02_164236.png

注意:这里在调用测试服务的时候,要将服务打开测试
(服务部打开会造成不能访问)

CXF框架完成webService服务的发布_第6张图片
2016-09-02_164435.png

这里发布服务的方式有两种
1:ServerFactoryBean方式
2:JaxWsServerFactoryBean方式(推荐使用)

    /**
 * 使用ServerFactoryBean方式
 * 使用JaxWsServerFactoryBean方式(推荐使用)
 * 两种方式的对比:
 * 1 : ServerFactoryBean
 *      - 不设置注解也可以发布webservice服务,不支持注解
 *      - 不支持拦截器的添加
 * 2 : JaxWsServerFactoryBean
 *      - 支持注释
 *      - 可以添加拦截器
 * 3 : webservice访问步骤:
 *      1.检测本地代理描述的wsdl是否与服务端的wsdl一直,俗称握手
 * @param args
 */

你可能感兴趣的:(CXF框架完成webService服务的发布)