起步
参照这一系列的另外一篇文章:
首先在eclipse中新建一个Dynamic Web Project,然后实现上篇文章中的所有类,唯一不同的是这里,我们不需要一个Server.java来启动一个Web Service。我们用CXF自带的org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet来在容器中启动一个Web Service服务。
pom.xml
4.0.0 com.cnblog.richaaaard.cxftest cxf-test-servlet-rs-helloworld war 1.0-SNAPSHOT cxf-test-servlet-rs-helloworld Maven Webapp http://maven.apache.org 3.1.4 org.apache.cxf cxf-rt-frontend-jaxrs ${cxf.version} org.apache.cxf cxf-rt-transports-http ${cxf.version} org.apache.cxf cxf-rt-transports-http-jetty ${cxf.version} org.apache.cxf cxf-rt-rs-extension-providers ${cxf.version} org.codehaus.jackson jackson-xc 1.9.0 org.codehaus.jackson jackson-jaxrs 1.9.0 javax.ws.rs jsr311-api 1.1.1 org.slf4j slf4j-api 1.5.8 org.slf4j slf4j-simple 1.5.8 commons-httpclient commons-httpclient 3.0 commons-io commons-io 2.3 junit junit 4.8.1 test cxf src/main/resources src/main/java ** **/*.java org.mortbay.jetty maven-jetty-plugin / 9000 org.apache.maven.plugins maven-compiler-plugin
主要的配置都在web.xml中
cxf cxf cxf org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet jaxrs.serviceClasses com.cnblog.richaaaard.cxftest.servlet.rs.helloworld.service.RoomService jaxrs.providers org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 1 cxf /services/* 60
可以发现我们使用了org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet这个Servlet包括使用里面一些启动参数:
jaxrs.serviceClasses
jaxrs.providers
来配置RESTful Web Service,其参数与我们上篇文章中用代码JAXRSServerFactoryBean的参数设置一致。
启动测试
我们在Eclipse中,将Web项目在Tomcat中运行
Tomcat运行Run As... -> Run on Server
最后
我们用浏览器访问Tomcat默认的8080端口地址:http://localhost:8080/cxf/services/roomservice/room
补充 Servlet配置参数模板
(注意:这只是一个模板,需要修改相关参数,请勿直接复制粘贴到项目中)
CXFServlet CXF Servlet org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet jaxrs.serviceClasses org.apache.cxf.systest.jaxrs.BookStore1, org.apache.cxf.systest.jaxrs.BookStore2 jaxrs.providers org.apache.cxf.systest.jaxrs.BookStoreProvider1, org.apache.cxf.systest.jaxrs.BookStoreProvider2 jaxrs.schemaLocations classpath:/WEB-INF/schemas/schema1.xsd classpath:/WEB-INF/schemas/schema2.xsd jaxrs.inInterceptors org.apache.cxf.systest.jaxrs.CustomInInterceptor jaxrs.outInterceptors org.apache.cxf.systest.jaxrs.CustomOutInterceptor jaxrs.extensions xml=application/xml json=application/json jaxrs.properties property1=value property2=value 1
参考:
http://zzxanadu.iteye.com/blog/542249(这仍然属于一个programatic实现的例子,只不过做到了servlet load方法中,未验证成功)
https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Services+Configuration#JAXRSServicesConfiguration-WithCXFNonSpringJaxrsServlet