从网络上找了很多入门的例子,但大部分都是有这样或那样的问题,搞的头大。
这里根据自己搭建的过程,整理出一个实际例子。
环境: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);
}
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;
}
}
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方法,这里不写出
}
@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 >
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 >
<! 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
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来进行测试。