千家信息网

Java WebService开源框架CXF案例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"Java WebService开源框架CXF案例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,
千家信息网最后更新 2026年11月03日Java WebService开源框架CXF案例分析

本篇内容介绍了"Java WebService开源框架CXF案例分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

CXF简介

CXF是一个开源的WebService框架。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 的发布和使用。

支持多种标准

  • 支持 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;

  • 支持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;

  • 支持 WSDL 1.1 、2.0;

  • 支持 MTOM;

它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)

Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。

灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),weblogic上面。

CXF入门案例

我们还以昨天的天气服务为案例来看一下CXF的开发过程。

服务端的实现

1.创建一个空的java项目,创建一个lib目录,将所有jar包放入lib目录  然后为工程引入jar包,选择build path,然后Add JARS,只用选择cxf-manifest.jar即可。

2.创建一个SEI接口,需要在接口上添加@WebService注解@WebServicepublic interface WeatherInterface {    public String queryWeather(String cityName);}
3.创建SEI接口实现类 public class WeatherInterfaceImpl implements WeatherInterface {    public String queryWeather(String cityName) {        if("河南".equals(cityName)) {            return "热爆炸";        }else {            return "冰雹";        }    }}
4.发布服务 public class WeatherServer {    public static void main(String[] args) {        //创建服务工厂Bean        JaxWsServerFactoryBean jaxWsServerFactoryBean=new JaxWsServerFactoryBean();        //设置服务接口        jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);        //设置服务实现类        jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());        //设置服务地址        jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather");        //创建服务        jaxWsServerFactoryBean.create();    }}
5.访问服务的wsdl文件地址,看服务是否发布成功    http://127.0.0.1:12345/weather?wsdl

发布SOAP1.2的服务端

SOAP分为1.1版本和1.2版本。JDK1.6并不支持1.2,我们可以通过CXF来发布SOAP1.2的服务端。
只需要在接口上添加注解 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)。然后重新发布服务即可

import javax.jws.WebService;import javax.xml.ws.BindingType;import javax.xml.ws.soap.SOAPBinding;@WebService@BindingType(SOAPBinding.SOAP12HTTP_BINDING)public interface WeatherInterface {    public String queryWeather(String cityName);}

客户端的实现

Wsdl2java命令是CXF提供的生成客户端的工具,他和wsimport类似,可以根据WSDL生成客户端代码 Wsdl2java常用参数:-d,指定输出目录-p,指定包名,如果不指定该参数,默认包名是WSDL的命名空间的倒序 Wsdl2java支持SOAP1.1和SOAP1.2
1.我们先创建一个客户端项目,然后引入jar包,和上面一样,使用Add JARS选择cxf-manifest.jar即可  然后使用工具生成客户端  wsdl2java -p com.cad.cxf -d . http://127.0.0.1:12345/weather?wsdl

2.创建客户端 public class WeatherClient {    public static void main(String[] args) {        JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();        //设置服务接口        jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);         //设置服务地址        jaxWsProxyFactoryBean.setAddress("http://127.0.0.1:12345/weather");        //获取服务接口实例        WeatherInterface weatherInterface=(WeatherInterface) jaxWsProxyFactoryBean.create();        //调用方法        String message=weatherInterface.queryWeather("河南");        System.out.println(message);    }}

CXF+Spring整合发布SOAP模式的服务

服务端的实现

1.创建WEB项目,导入jar包
2.创建SEI接口 @WebService@BindingType(SOAPBinding.SOAP12HTTP_BINDING)public interface WeatherInterface {    public String queryWeather(String cityName);}
3.创建SEI实现类 public class WeatherInterfaceImpl implements WeatherInterface {    public String queryWeather(String cityName) {        if("河南".equals(cityName)) {            return "热爆炸";        }else {            return "冰雹";        }    }}
4.配置spring配置文件,applicationContext.xml                  
5.配置web.xml   CXFSpringDemo  //配置Tomcat启动时加载Spring配置文件       contextConfigLocation    classpath:applicationContext.xml        org.springframework.web.context.ContextLoaderListener    //配置CXF提供的Servlet       CXF    org.apache.cxf.transport.servlet.CXFServlet        CXF    /ws/*        index.html    index.htm    index.jsp    default.html    default.htm    default.jsp  
6.部署到Tomcat下,发布服务,并访问 http://localhost:8080/CXFSpringDemo/ws/weather?wsdl

客户端的实现

1.创建项目,导入jar包,生成客户端 wsdl2java -p com.cad.cxf -d . http://localhost:8080/CXFSpringDemo/ws/weather?wsdl

2.配置Spring文件                    
3.通过Spring容器获取服务实现类,调用方法 public class WeatherClient {    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");        WeatherInterface  weatherInterface = (WeatherInterface) context.getBean("weatherClient");        String message=weatherInterface.queryWeather("河南");        System.out.println(message);    }}

CXF发布REST模式的服务

REST即表述性状态传递(英文:Representational State Transfer,简称REST),是一种软件架构风格。

因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现rest服务采用HTTP 做传输协议,REST 对于HTTP 的利用实现精确的资源定位。

例如:非rest方式:http://ip:port/queryUser.action?userType=student&id=001 Rest方式:http://ip:port/user/student/query/001
1.创建一个项目,导入CXF jar包
2.创建一个实体类 Student   @XmlRootElement(name="student")可以实现XML和对象之间的转换,name属性指定根元素@XmlRootElement(name="student")public class Student {    private int id;    private String name;    private Date birthday;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }}
3.创建SEI接口 @WebService//@Path("/student")就是指定访问该接口的路径@Path("/Student")public interface StudentInterface {        //指定请求方式,如果服务端发布的时候指定的是GET(POST),那么客户端访问时必须使用GET(POST        @GET        //指定服务数据类型,可以是XML,json等数据类型        @Produces(MediaType.APPLICATION_XML)        //@Path("/query/{id}")指定该方法的路径,"{id}"指参数,多个参数,以"/"隔开,放到"{}"中        @Path("/query/{id}")        public Student queryStudent(@PathParam("id")int id);        @GET        @Produces(MediaType.APPLICATION_XML)        @Path("/queryList/{name}")        public List queryList(@PathParam("name")String name);}
4.创建SEI实现类 public class StudentInterfaceImpl implements StudentInterface {    @Override    public Student queryStudent(int id) {        Student s=new Student();        s.setId(666);        s.setName("张三");        s.setBirthday(new Date());        return s;    }    @Override    public List queryList(String name) {        Student s=new Student();        s.setId(666);        s.setName("张三");        s.setBirthday(new Date());        Student s2=new Student();        s2.setId(888);        s2.setName("李四");        s2.setBirthday(new Date());        List l=new ArrayList();        l.add(s);        l.add(s2);        return l;    }}
5.发布服务 public class StudentServer {    public static void main(String[] args) {        JAXRSServerFactoryBean jaxrsServerFactoryBean=new JAXRSServerFactoryBean();        //设置服务实现类        jaxrsServerFactoryBean.setServiceBean(new StudentInterfaceImpl());        //设置资源类,如果有多个资源类,可以以","隔开,例如Student.class StudentInterface.class都是资源类,但是StudentInterfaceImpl里面已经包含了Student.class StudentInterface.class,所以不用重复指定        jaxrsServerFactoryBean.setResourceClasses(StudentInterfaceImpl.class);         //设置服务地址        jaxrsServerFactoryBean.setAddress("http://127.0.0.1:12345/Class");        //发布服务        jaxrsServerFactoryBean.create();    }}
6.测试服务 访问query方法     http://127.0.0.1:12345/Class/Student/query/001

访问queryList方法     http://127.0.0.1:12345/Class/Student/queryList/xxx

如果服务端发布时指定请求方式是GET(POST),客户端必须使用GET(POST)访问服务端,否则会报异常。
如果在同一方法上同时指定XML和JSON媒体类型,在GET请求下,默认返回XML,在POST请求下,默认返回JSON

CXF+Spring整合发布REST模式的服务

综合案例:手机归属地查询

"Java WebService开源框架CXF案例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

服务 客户 接口 支持 客户端 项目 配置 案例 方法 方式 端的 参数 地址 文件 模式 资源 河南 生成 框架 多种 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 互联网科技产业 腾讯阿里互联网科技 北京互联网科技有限公司 万易互联网科技有限公司 深圳天众互联网科技公司 天下捷融互联网科技 深圳期待互联网科技 互联网巨头投资的硬核科技 互联网教育科技公司vipkid 广州市恰铎互联网科技有限公司 中国科技创新与世界互联网大会 如何创新互联网科技 洛阳共同富裕互联网科技有限公司 互联网金融科技公司的优势 深圳互联网科技的发展 互联网科技实习生岗位 易企秀互联网科技是做什么的 陕西九四连强互联网科技有限公司 互联网的黑科技实验室 互联网与科技金融数据 新浪科技互联网 中国互联网金融科技基金 哈尔滨新华互联网科技 互联网金融中的现代科技 互联网数据科技专业 广州百诚互联网科技有限公司官网 21世纪互联网科技成就 广州梦谷互联网科技有限公司领导 恒生科技互联网指数十大成分股
0