简介
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 的发布和使用。Apache CXF 已经是一个正式的 Apache *项目。
简单使用
编写服务端
1、新建 maven web 工程作为服务端,引入如下依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>cxf_server</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.4.RELEASE</version> </dependency> </dependencies> <build> <plugins> <!--使用 tomcat7:run--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
pom.xml
2、新建服务类接口及其实现类:
package com.zze.webservice; import javax.jws.WebService; @WebService public interface ITestService { String hello(); }
com.zze.webservice.ITestService
package com.zze.webservice.impl; import com.zze.webservice.ITestService; public class TestService implements ITestService { public String hello() { return "hello CXF"; } }
com.zze.webservice.impl.TestService
3、在 Spring 配置文件中发布服务:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!--调用的类--> <bean id="testService" class="com.zze.webservice.impl.TestService"></bean> <!--发布服务--> <jaxws:server address="/testService"> <jaxws:serviceBean> <ref bean="testService"/> </jaxws:serviceBean> </jaxws:server> </beans>
applicationContext_cxf.xml
4、配置 Spring 监听器及 CXF 过滤器:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext_cxf.xml</param-value> </context-param> <filter> <filter-name>cxf</filter-name> <filter-class>org.apache.cxf.transport.servlet.CXFServlet</filter-class> </filter> <filter-mapping> <filter-name>cxf</filter-name> <url-pattern>/ws/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
WEB-INF/web.xml
5、启动程序(服务随之发布),测试服务是否发布成功,发布成功则如下:
编写客户端
1、新建 maven java 工程作为客户端,引入如下依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>cxf_client</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
pom.xml
2、cmd 进入 classpath 目录下,执行如下命令生成客户端代码:
wsimport -s . http://localhost:8080/ws/testService?wsdl
3、在 Spring 配置文件中配置调用服务的客户端实例:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:client id="testClient" address="http://localhost:8080/ws/testService?wsdl" serviceClass="com.zze.webservice.impl.ITestService"/> </beans>
applicationContext_cxf.xml
4、编写代码调用服务端,如下输出则调用成功:
package com.zze.webservice.test; import com.zze.webservice.impl.ITestService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class CXFTest{ @Test public void test1() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext_cxf.xml"); ITestService testClient = (ITestService)applicationContext.getBean("testClient"); System.out.println(testClient.hello()); } }
com.zze.webservice.test.CXFTest