从网络上找了很多入门的例子,但大部分都是有这样或那样的问题,搞的头大。
这里根据自己搭建的过程,整理出一个实际例子。
环境:jdk1.5+,eclipse3.4,Tomcat5.5,cxf-2.1.4
以下没有用到任何插件来生成
服务端
一、server 端:
接口:WebServiceSample
import hs.cxf.bean.ReqBean;
import hs.cxf.bean.RespBean;
import hs.cxf.bean.UserDTO;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
/**
* WebService接口定义类.
*
* 使用@WebService将接口中的所有方法输出为Web Service.
* 可用annotation对设置方法、参数和返回值在WSDL中的定义.
*/
@WebService
public interface WebServiceSample
{
/** *//**
* 一个简单的方法,返回一个字符串
*
* @param hello
* @return
*/
String say(String hello);
/** *//**
* 稍微复杂一些的方法,传递一个对象给服务端处理
*
* @param user
* @return
*/
String sayUserName(@WebParam(name = "user") UserDTO user);
/** *//**
* 通过对象来交互
*/
@WebResult(name = "RespBean")
RespBean action(@WebParam(name = "ReqBean") ReqBean req);
}
实现类:WebServiceSampleImpl
import javax.jws.WebService;
import hs.cxf.bean.ReqBean;
import hs.cxf.bean.RespBean;
import hs.cxf.bean.UserDTO;
/** *//**
* @Title:
*
* @Description:
*
* @Copyright: Copyright (c) 2009 FFCS All Rights Reserved
*
* @author zhengzhi 2009-3-16 上午11:22:23
* @version 1.00.000
*
*/
@WebService(endpointInterface="hs.cxf.server.WebServiceSample")
public class WebServiceSampleImpl implements WebServiceSample
{
public String sayUserName(UserDTO user)
{
return "hello " + user.getName();
}
public String say(String hello)
{
return "hello " + hello;
}
public RespBean action(ReqBean req)
{
RespBean respBean = new RespBean();
respBean.setExp(req.getExp());
respBean.setRespId(req.getSeqId());
return respBean;
}
}
实体类:UserDTO,ReqBean,RespBean
UserDTO
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User")
public class UserDTO
{
protected Integer id;
protected String name;
//get和set方法,这里不写出
}
ReqBean
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ReqBean")
public class ReqBean
{
private String exp;
private String seqId;
//get和set方法,这里不写出
}
RespBean
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RespBean")
public class RespBean
{
private String respId;
private String exp;
//get和set方法,这里不写出
}
二、Spring 配置
<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">
<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="jaxWsServiceFactoryBean"
class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="wrapped" value="true" />
<property name="dataBinding" ref="aegisBean" />
</bean>
<bean id="aegisBean"
class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
<jaxws:endpoint id="CollectiveServices"
implementor="hs.cxf.server.WebServiceSampleImpl" address="/HelloWorld">
<jaxws:serviceFactory>
<ref bean="jaxWsServiceFactoryBean"/>
</jaxws:serviceFactory>
</jaxws:endpoint>
</beans>
三.web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!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 id="WebApp_ID">
<display-name>cxfTest</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<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>
</web-app>
这里要注意,cxf 教程上提到需要的包并不完整,还需要导入:jdom,stax-api-1.0-2.jar,jaxws-api.jar 这些包
我使用的包如下:
aopalliance-1.0.jar
asm-2.2.3.jar
commons-logging-1.1.1.jar
cxf-2.1.4.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-javamail_1.4_spec-1.3.jar
geronimo-servlet_2.5_spec-1.2.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.9.jar
jaxen-core.jar
jaxen-jdom.jar
jaxws-api.jar
jdom.jar
jetty-6.1.9.jar
jetty-util-6.1.9.jar
neethi-2.0.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.2.jar
saxpath.jar
spring-beans-2.0.8.jar
spring-context-2.0.8.jar
spring-core-2.0.8.jar
spring-web-2.0.8.jar
stax-api-1.0-2.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.6.jar
xalan.jar
xml-resolver-1.2.jar
XmlSchema-1.4.3.jar
然后启动tomcat,输入http://IP:端口/模块名/ws 查看你生成的服务端,可使用xmlspy来进行测试。
注:
后续将研究下如何并不结合Spring 来使用CXF,如有知道的朋友,请留言告知。