Apache CXF 详解:从基础知识到实践应用

需积分: 9 2 下载量 122 浏览量 更新于2024-07-21 收藏 40KB DOCX 举报
Apache CXF 学习笔记 Apache CXF 是一个基于 Java 的服务框架,提供了对 JAX-WS 的全面的支持,允许开发者轻松地实现 Web 服务的发布和使用。下面是对 Apache CXF 的详细介绍和实践讲解。 1. CXF 简介 Apache CXF 是 Celtix 和 XFire 两个开源项目的结合体,现在已经正式更名为 Apache CXF。CXF 继承了 Celtix 和 XFire 两个项目的精华,提供了对 JAX-WS 的全面的支持,并且提供了多种 Binding、DataBinding、Transport 以及各种 Format 的支持。 1.1 CXF 概述 CXF 是一个基于 Java 的服务框架,提供了对 JAX-WS 的全面的支持,允许开发者轻松地实现 Web 服务的发布和使用。CXF 支持多种协议标准,包括 JAX-WS、JAX-WSA、JSR-181 和 SAAJ 等,并且支持 SOAP1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy 等协议。 1.2 CXF 支持 CXF 支持多种协议标准,包括 JAX-WS、JAX-WSA、JSR-181 和 SAAJ 等,并且支持 SOAP1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy 等协议。 1.2.1 协议标准 CXF 支持多种协议标准,包括 JAX-WS、JAX-WSA、JSR-181 和 SAAJ 等。 1.2.2 传输方式 CXF 支持多种协议传输方式,包括 Bindings、DataBindings、Transport 和 Format 等。Bindings 支持 SOAP、REST/HTTP 等协议,DataBindings 支持 JAXB2.0、Aegis 等数据绑定方式,Transport 支持 HTTP、Servlet、JMS 和 Jabber 等传输方式,Format 支持 XML、JSON 等格式。 1.3 CXF 特点 CXF 有三个主要特点:灵活部署、支持多种编程语言和代码生成。 1.3.1 灵活部署 CXF 允许开发者灵活地部署 Web 服务,可以根据实际项目的需要,采用代码优先(CodeFirst)或者 WSDL 优先(WSDLFirst)来实现 Web 服务的发布和使用。 1.3.2 支持多种编程语言 CXF 支持多种编程语言,包括 Java、C++ 等,可以满足不同的开发需求。 1.3.3 代码生成 CXF 提供了代码生成工具,允许开发者快速生成 Web 服务的客户端和服务器端代码。 2. 实践讲解 下面是对 CXF 的实践讲解,包括纯 CXF 和 Spring 集成的两个例子。 2.1 CXF 开发例子 下面是一个简单的 CXF 开发例子,演示如何使用 CXF 实现一个简单的 Web 服务。 2.1.1 步骤图 下面是 CXF 开发例子的步骤图: * 创建一个新的 CXF 项目 * 定义服务接口 * 实现服务接口 * 发布服务 * 使用服务 2.1.2 步骤详解 下面是 CXF 开发例子的步骤详解: * 创建一个新的 CXF 项目:首先,需要创建一个新的 CXF 项目,可以使用 Eclipse 或者其他开发工具来创建项目。 * 定义服务接口:定义服务接口,包括服务的名称、方法和参数等信息。 * 实现服务接口:实现服务接口,包括实现服务的逻辑和业务处理等。 * 发布服务:发布服务,使其可以被其他应用程序访问。 * 使用服务:使用服务,包括调用服务的方法和处理结果等。 2.2 CXF 与 Spring 集成例子 下面是一个使用 CXF 与 Spring 集成的例子,演示如何使用 CXF 与 Spring 实现一个简单的 Web 服务。 2.2.1 步骤图 下面是 CXF 与 Spring 集成例子的步骤图: * 创建一个新的 CXF 项目 * 定义服务接口 * 实现服务接口 * 发布服务 * 使用服务 2.2.2 步骤详解 下面是 CXF 与 Spring 集成例子的步骤详解: * 创建一个新的 CXF 项目:首先,需要创建一个新的 CXF 项目,可以使用 Eclipse 或者其他开发工具来创建项目。 * 定义服务接口:定义服务接口,包括服务的名称、方法和参数等信息。 * 实现服务接口:实现服务接口,包括实现服务的逻辑和业务处理等。 * 发布服务:发布服务,使其可以被其他应用程序访问。 * 使用服务:使用服务,包括调用服务的方法和处理结果等。 3. 附录 3.1 CXF 如何生成客户端 CXF 提供了多种方式来生成客户端,包括使用 CXF 的代码生成工具和使用其他开发工具等。 3.2 CXF 会用到的注解 CXF 会用到多种注解,包括 @WebService、@WebMethod、@WebResult 等。

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.xml.ws.Endpoint]: Factory method 'endpoint' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/cxf/frontend/ServerFactoryBean at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] ... 19 common frames omitted Caused by: java.lang.NoClassDefFoundError: org/apache/cxf/frontend/ServerFactoryBean at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_301] at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[na:1.8.0_301] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_301] at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[na:1.8.0_301] at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[na:1.8.0_301] at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[na:1.8.0_301] at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[na:1.8.0_301] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_301] at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[na:1.8.0_301] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_301] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[na:1.8.0_301] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_301] at org.apache.cxf.jaxws.EndpointImpl.<init>(EndpointImpl.java:164) ~[cxf-rt-frontend-jaxws-3.4.4.jar:3.4.4] at org.apache.cxf.jaxws.EndpointImpl.<init>(EndpointImpl.java:157) ~[cxf-rt-frontend-jaxws-3.4.4.jar:3.4.4] at org.apache.cxf.jaxws.EndpointImpl.<init>(EndpointImpl.java:171) ~[cxf-rt-frontend-jaxws-3.4.4.jar:3.4.4] at org.apache.cxf.jaxws.EndpointImpl.<init>(EndpointImpl.java:178) ~[cxf-rt-frontend-jaxws-3.4.4.jar:3.4.4]

2023-06-07 上传