一、CXF的介绍
Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框架是一种基于servlet技术的SOA应用开发框架,要正常运用基于CXF应用框架开发的企业应用,除了CXF应用本身之外,还需要JDK和servlet容器的支持。
二、CXF的准备条件
所需要的jar包:
xmlbeans-2.4.0.jar
wss4j-1.5.9.jar
jetty-server-7.1.6.v20100715.jar
jetty-util-7.1.6.v20100715.jar
geronimo-ws-metadata_2.0_spec-1.1.3.jar
geronimo-activation_1.1_spec-1.1.jar
geronimo-servlet_3.0_spec-1.0.jar
velocity-1.6.4.jar
jaxb-xjc-2.2.1.1.jar
xml-resolver-1.2.jar
wsdl4j-1.6.2.jar
cxf-2.3.0.jar
XmlSchema-1.4.7.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.2.1.1.jar
neethi-2.0.4.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
下载地址:http://download.csdn.net/detail/ch656409110/5748183 (取自己需要的jar包)
三、创建webservice服务端
1、先将jar包放入lib目录
2、在web.xml中配置CXF框架的核心servlet
- <!-- CXF -->
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/ws/*</url-pattern>
- </servlet-mapping>
3、在applicationContext.xml中导入xml,并且发布webservice服务
- <?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:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:jaxrs="http://cxf.apache.org/jaxrs"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://cxf.apache.org/jaxws
- http://cxf.apache.org/schemas/jaxws.xsd
- http://cxf.apache.org/jaxrs
- http://cxf.apache.org/schemas/jaxrs.xsd
- "
- default-autowire="byName"
- >
- <import resource="classpath:META-INF/cxf/cxf.xml" />
- <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
- <bean id="userWebservice" class="com.mm.ws.service.impl.UserWebserviceImpl"></bean>
- <jaxws:endpoint implementor="#userWebservice"
- address="/userWebservice">
- </jaxws:endpoint>
- </beans>
4、定义webservice接口UserWebservice和 实现类UserWebserviceImpl
package com.mm.ws.service;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.mm.ws.result.UserResult;
@WebService(targetNamespace="http://ws.mm.com/")
public interface UserWebservice {
/**
* 用户登录
* 这里的WebParam必须指定,否则调用的时候返回null
*/
public UserResult login(@WebParam(name = "userName") String userName, @WebParam(name = "pwd") String pwd);
}
public class UserWebserviceImpl implements UserWebservice {
@Override
public UserResult login(String userName, String password) {
UserResult loginResult = new UserResult();
return loginResult;
}
}
这样子,基本上就可以了。
5、保存代码,发布项目,启动tomact。
在地址栏输入:http://localhost:8880/ws/userWebservice?wsdl 即可看到发布的服务端的明细。
6、通过客户端调用服务端webservice,CXF生成客户端代码
通过maven引入cxf相关jar包
maven:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-tools-common</artifactId> <version>${cxf.version}</version> <exclusions> <exclusion> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> </exclusion> </exclusions> </dependency>
通过ant生成客户端代码:
<?xml version="1.0"?> <project name="cxf wsdl2java" basedir="." default="cxfWSDLToJava"> <property name="cxf.home" location="E:\tools\apache-cxf-2.5.0" /> <path id="cxf.classpath"> <fileset dir="${cxf.home}/lib"> <include name="*.jar" /> </fileset> </path> <target name="cxfWSDLToJava"> <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true"> <arg value="-client" /> <arg value="-p" /> <arg value="com.dii.ws.user" /> <arg value="-b" /> <arg value="ydd-user-binding-date.xml" /> <arg value="-d" /> <arg value="../src/main/java" /> <arg value="http://localhost:8880/ws/userWebservice?wsdl" /> <classpath> <path refid="cxf.classpath" /> </classpath> </java> </target> </project>
7、在applicationContext.xml中导入xml,并且配置webservice客户端
<?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" xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:client id="userWebservice" serviceClass="com.dii.ws.user.UserWebservice" address="http://localhost:8880/ws/userWebservice" /> </beans>