这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的。关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了。如果你对Spring整合CXF WebService不了解,具体你可以参看这两篇文章:
http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html
http://www.cnblogs.com/hoojo/archive/2012/07/13/2590593.html
如果你不了解restful风格的WebService,你可以参考:
http://www.oracle.com/technetwork/articles/javase/index-137171.html
SpringMVC对RESTful的支持:
http://www.cnblogs.com/hoojo/archive/2011/06/10/2077422.html
使用 Jersey框架,搭建RESTful WebService(这个也比较简单)
http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/
官方文档:http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e8
其中,比较常用的RESTful框架就有Jersey、Spring REST、CXF RESTful,这些都可以很好的整合Spring框架,发布也相当的简单。且简单、易用、易上手,文档也比较丰富。
开发环境:
System:Windows
JavaEE Server:tomcat6
JavaSDK: jdk6+
IDE:eclipse、MyEclipse 6.6
开发依赖库:
JDK6、 JavaEE5、CXF-2.3.3、Spring 3.0.4
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
http://hoojo.blogjava.net
下面我们就接着http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html这篇文章,开始我们CXF RESTful WebService的旅程,enjoy~!^_*
准备工作
首先,你需要添加相关的jar包
![]()
其中,jsr331-api-1.1.1.jar是必须的,利用CXF发布REST服务得用到它,在cxf的lib库中可以找到这个jar。
下载地址:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.11/apache-cxf-2.3.11.zip
其它的jar包都是非必须的!
JavaEntity
复制代码1package com.hoo.entity;复制代码1复制代码1import java.util.Map;复制代码1import javax.xml.bind.annotation.XmlRootElement;复制代码1复制代码1/**复制代码1* <b>function:</b> MapBean 封装Map集合元素复制代码1* @author hoojo复制代码1* @createDate 2012-7-20 下午01:22:31复制代码1* @file MapBean.java复制代码1* @package com.hoo.entity复制代码1* @project CXFWebService复制代码1* @blog http://blog.csdn.net/IBM_hoojo复制代码1* @email hoojo_@126.com复制代码1* @version 1.0复制代码1*/复制代码1@XmlRootElement复制代码1public class MapBean {复制代码1private Map<String, User> map;复制代码1复制代码1//@XmlElement(type = User.class)复制代码1public Map<String, User> getMap() {复制代码1return map;复制代码1}复制代码1public void setMap(Map<String, User> map) {复制代码1this.map = map;复制代码1}复制代码1}
复制代码1package com.hoo.entity;复制代码1复制代码1import java.util.HashMap;复制代码1import java.util.List;复制代码1import javax.xml.bind.annotation.XmlRootElement;复制代码1复制代码1/**复制代码1* <b>function:</b> Users Entity复制代码1* @author hoojo复制代码1* @createDate 2011-3-18 上午09:27:31复制代码1* @file Users.java复制代码1* @package com.hoo.entity复制代码1* @project CXFWebService复制代码1* @blog http://blog.csdn.net/IBM_hoojo复制代码1* @email hoojo_@126.com复制代码1* @version 1.0复制代码1*/复制代码1@XmlRootElement(name = "UserInfos")复制代码1public class Users {复制代码1private List<User> users;复制代码1复制代码1private User[] userArr;复制代码1复制代码1private HashMap<String, User> maps;复制代码1复制代码1复制代码1// getter/setter复制代码1}复制代码1package com.hoo.entity;复制代码1复制代码1import java.io.Serializable;复制代码1import javax.xml.bind.annotation.XmlRootElement;复制代码1复制代码1/**复制代码1* <b>function:</b>User Entity复制代码1* @author hoojo复制代码1* @createDate Dec 16, 2010 10:20:02 PM复制代码1* @file User.java复制代码1* @package com.hoo.entity复制代码1* @project AxisWebService复制代码1* @blog http://blog.csdn.net/IBM_hoojo复制代码1* @email hoojo_@126.com复制代码1* @version 1.0复制代码1*/复制代码1@XmlRootElement(name = "UserInfo")复制代码1public class User implements Serializable {复制代码1private static final long serialVersionUID = 677484458789332877L;复制代码1private int id;复制代码1private String name;复制代码1private String email;复制代码1private String address;复制代码1复制代码1//getter/setter复制代码1复制代码1@Override复制代码1public String toString() {复制代码1return this.id + "#" + this.name + "#" + this.email + "#" + this.address;复制代码1}复制代码1}
一、定义你的WebService的接口RESTSample.java,代码如下
1package com.hoo.service;
1
1import java.io.IOException;
1import javax.servlet.http.HttpServletRequest;
1import javax.servlet.http.HttpServletResponse;
1import javax.ws.rs.Consumes;
1import javax.ws.rs.DELETE;
1import javax.ws.rs.GET;
1import javax.ws.rs.POST;
1import javax.ws.rs.PUT;
1import javax.ws.rs.Path;
1import javax.ws.rs.PathParam;
1import javax.ws.rs.Produces;
1import javax.ws.rs.core.Context;
1import javax.ws.rs.core.MediaType;
1
1import com.hoo.entity.MapBean;
1import com.hoo.entity.User;
1import com.hoo.entity.Users;
1
1
1/*
1注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
1@Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello。
1@GET:这意味着以下方法可以响应 HTTP GET 方法。
1@Produces:以纯文本方式定义响应内容 MIME 类型。
1
1@Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。
1@Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。
1@PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。
1@Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。
1*/
1/**
1* <b>function:</b> CXF RESTful风格WebService
1* @author hoojo
1* @createDate 2012-7-20 下午01:23:04
1* @file RESTSampleSource.java
1* @package com.hoo.service
1* @project CXFWebService
1* @blog http://blog.csdn.net/IBM_hoojo
1* @email hoojo_@126.com
1* @version 1.0
1*/
1@Path(value = "/sample")
1public interface RESTSample {
1
1@GET
1@Produces(MediaType.TEXT_PLAIN)
1public String doGet();
1
1@GET
1@Produces(MediaType.TEXT_PLAIN)
1@Path("/request/{param}")
1public String doRequest(@PathParam("param") String param,
1@Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse);
1
1@GET
1@Path("/bean/{id}")
1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
1public User getBean(@PathParam("id") int id);
1
1@GET
1@Path("/list")
1@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
1public Users getList();
1
1@GET
1@Path("/map")
1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
1public MapBean getMap();
1
1/*
1@Consumes:声明该方法使用 HTML FORM。
1@FormParam:注入该方法的 HTML 属性确定的表单输入。
1@Response.created(uri).build(): 构建新的 URI 用于新创建的联系人(/contacts/{id})并设置响应代码(201/created)。
1您可以使用 http://localhost:8080/Jersey/rest/contacts/<id> 访问新联系人
1*/
1@POST
1@Path("/postData")
1public User postData(User user) throws IOException;
1
1@PUT
1@Path("/putData/{id}")
1@Consumes(MediaType.APPLICATION_XML)
1public User putData(@PathParam("id") int id, User user);
1
1@DELETE
1@Path("/removeData/{id}")
1public void deleteData(@PathParam("id") int id);
1}
二、RESTSample接口的实现,这里我们只是简单的实现下,并不是涉及实际的具体业务
1package com.hoo.service;
1
1import java.io.IOException;
1import java.util.ArrayList;
1import java.util.HashMap;
1import java.util.List;
1import java.util.Map;
1import javax.servlet.http.HttpServletRequest;
1import javax.servlet.http.HttpServletResponse;
1import javax.ws.rs.DELETE;
1import javax.ws.rs.GET;
1import javax.ws.rs.POST;
1import javax.ws.rs.PUT;
1import javax.ws.rs.Path;
1import javax.ws.rs.PathParam;
1import javax.ws.rs.Produces;
1import javax.ws.rs.core.Context;
1import javax.ws.rs.core.MediaType;
1import javax.ws.rs.core.Request;
1import javax.ws.rs.core.UriInfo;
1import com.hoo.entity.MapBean;
1import com.hoo.entity.User;
1import com.hoo.entity.Users;
1
1
1/*
1注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
1@Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello。
1@GET:这意味着以下方法可以响应 HTTP GET 方法。
1@Produces:以纯文本方式定义响应内容 MIME 类型。
1
1@Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。
1@Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。
1@PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。
1@Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。
1*/
1/**
1* <b>function:</b> CXF RESTful风格WebService
1* @author hoojo
1* @createDate 2012-7-20 下午01:23:04
1* @file RESTSampleSource.java
1* @package com.hoo.service
1* @project CXFWebService
1* @blog http://blog.csdn.net/IBM_hoojo
1* @email hoojo_@126.com
1* @version 1.0
1*/
1@Path(value = "/sample")
1public class RESTSampleSource implements RESTSample {
1
1@Context
1private UriInfo uriInfo;
1
1@Context
1private Request request;
1
1
1@GET
1@Produces(MediaType.TEXT_PLAIN)
1public String doGet() {
1return "this is get rest request";
1}
1
1@GET
1@Produces(MediaType.TEXT_PLAIN)
1@Path("/request/{param}")
1public String doRequest(@PathParam("param") String param,
1@Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse) {
1System.out.println(servletRequest);
1System.out.println(servletResponse);
1System.out.println(servletRequest.getParameter("param"));
1System.out.println(servletRequest.getContentType());
1System.out.println(servletResponse.getCharacterEncoding());
1System.out.println(servletResponse.getContentType());
1return "success";
1}
1
1@GET
1@Path("/bean/{id}")
1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
1public User getBean(@PathParam("id") int id) {
1System.out.println("####getBean#####");
1System.out.println("id:" + id);
1System.out.println("Method:" + request.getMethod());
1System.out.println("uri:" + uriInfo.getPath());
1System.out.println(uriInfo.getPathParameters());
1
1User user = new User();
1user.setId(id);
1user.setName("JojO");
1return user;
1}
1
1@GET
1@Path("/list")
1@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
1public Users getList() {
1System.out.println("####getList#####");
1System.out.println("Method:" + request.getMethod());
1System.out.println("uri:" + uriInfo.getPath());
1System.out.println(uriInfo.getPathParameters());
1
1List<User> list = new ArrayList<User>();
1User user = null;
1for (int i = 0; i < 4;i ++) {
1user = new User();
1user.setId(i);
1user.setName("JojO-" + i);
1list.add(user);
1}
1Users users = new Users();
1users.setUsers(list);
1return users;
1}
1
1@GET
1@Path("/map")
1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
1public MapBean getMap() {
1System.out.println("####getMap#####");
1System.out.println("Method:" + request.getMethod());
1System.out.println("uri:" + uriInfo.getPath());
1System.out.println(uriInfo.getPathParameters());
1
1Map<String, User> map = new HashMap<String, User>();
1User user = null;
1for (int i = 0; i < 4;i ++) {
1user = new User();
1user.setId(i);
1user.setName("JojO-" + i);
1map.put("key-" + i, user);
1}
1MapBean bean = new MapBean();
1bean.setMap(map);
1return bean;
1}
1
1/*
1@Consumes:声明该方法使用 HTML FORM。
1@FormParam:注入该方法的 HTML 属性确定的表单输入。
1@Response.created(uri).build(): 构建新的 URI 用于新创建的联系人(/contacts/{id})并设置响应代码(201/created)。
1您可以使用 http://localhost:8080/Jersey/rest/contacts/<id> 访问新联系人
1*/
1@POST
1@Path("/postData")
1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
1public User postData(User user) throws IOException {
1System.out.println(user);
1user.setName("jojo##12321321");
1return user;
1}
1
1@PUT
1@Path("/putData/{id}")
1@Produces({ MediaType.APPLICATION_XML })
1public User putData(@PathParam("id") int id, User user) {
1System.out.println("#####putData#####");
1System.out.println(user);
1user.setId(id);
1user.setAddress("hoojo#gz");
1user.setEmail("hoojo_@126.com");
1user.setName("hoojo");
1System.out.println(user);
1return user;
1}
1
1@DELETE
1@Path("/removeData/{id}")
1public void deleteData(@PathParam("id") int id) {
1System.out.println("#######deleteData#######" + id);
1}
1}
复制代码1<?xml version="1.0" encoding="UTF-8"?>复制代码1<beans xmlns="http://www.springframework.org/schema/beans"复制代码1xmlns:context="http://www.springframework.org/schema/context"复制代码1xmlns:jaxws="http://cxf.apache.org/jaxws"复制代码1xmlns:jaxrs="http://cxf.apache.org/jaxrs"复制代码1xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"复制代码1xsi:schemaLocation="http://www.springframework.org/schema/beans复制代码1http://www.springframework.org/schema/beans/spring-beans-3.0.xsd复制代码1http://www.springframework.org/schema/context复制代码1http://www.springframework.org/schema/context/spring-context-3.0.xsd复制代码1http://cxf.apache.org/jaxws复制代码1http://cxf.apache.org/schemas/jaxws.xsd复制代码1http://cxf.apache.org/jaxrs复制代码1http://cxf.apache.org/schemas/jaxrs.xsd">特别注意上面加粗带下划线的部分,这是新增加的配置。我们发布restful WebService需要用到它。然后在配置文件中添加如下配置复制代码1<import resource="classpath:META-INF/cxf/cxf.xml"/>复制代码1<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>复制代码1<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>复制代码1<bean id="restSample" class="com.hoo.service.RESTSampleSource"/>复制代码1<!-- 这里的地址很重要,客户端需要通过这个地址来访问WebService -->复制代码1<jaxrs:server id="restServiceContainer" address="/rest">复制代码1<jaxrs:serviceBeans>复制代码1<ref bean="restSample" />复制代码1</jaxrs:serviceBeans>复制代码1<jaxrs:extensionMappings>复制代码1<entry key="json" value="application/json" />复制代码1<entry key="xml" value="application/xml" />复制代码1</jaxrs:extensionMappings>复制代码1<jaxrs:languageMappings>复制代码1<entry key="en" value="en-gb"/>复制代码1</jaxrs:languageMappings>复制代码1</jaxrs:server>这样服务器端就完成了CXF RESTful WebService的发布,启动你的tomcat。然后在浏览器中服务地址:http://localhost:8000/CXFWebService/ (其实这里请求的是CXFServlet,你可以看看上一篇Spring整合CXF文章的web.xml的配置)
你就可以看到我们这里刚刚发布的RESTSample rest的WebService
![]()
你也可以看看里面的xml,也就是WebService的wsdl文件内容。我们找一个GET方式的WebService的方法,在浏览器中调用一下试试
http://localhost:8000/CXFWebService/rest/sample/bean/123
这个url对应到下面这个方法
复制代码1@GET复制代码1@Path("/bean/{id}")复制代码1@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })复制代码1public User getBean(@PathParam("id") int id)结果如下
![]()
一篇xml文档内容。
四、编写客户端代码,调用RESTful WebService
复制代码1package com.hoo.client;复制代码1复制代码1import java.io.IOException;复制代码1import javax.ws.rs.core.MediaType;复制代码1import org.apache.cxf.jaxrs.client.WebClient;复制代码1import org.junit.After;复制代码1import org.junit.Before;复制代码1import org.junit.Test;复制代码1import org.springframework.context.ApplicationContext;复制代码1import org.springframework.context.support.ClassPathXmlApplicationContext;复制代码1import com.hoo.entity.MapBean;复制代码1import com.hoo.entity.User;复制代码1import com.hoo.entity.Users;复制代码1import com.hoo.service.RESTSample;复制代码1复制代码1/**复制代码1* <b>function:</b> RESTful风格WebService复制代码1* @author hoojo复制代码1* @createDate 2012-7-20 下午03:31:03复制代码1* @file RSETServiceClient.java复制代码1* @package com.hoo.client复制代码1* @project CXFWebService复制代码1* @blog http://blog.csdn.net/IBM_hoojo复制代码1* @email hoojo_@126.com复制代码1* @version 1.0复制代码1*/复制代码1public class RSETServiceClient {复制代码1复制代码1private static WebClient client;复制代码1复制代码1@Before复制代码1public void init() {复制代码1// 手动创建webClient对象,注意这里的地址是发布的那个/rest地址复制代码1//String url = "http://localhost:8000/CXFWebService/rest/";复制代码1//client = WebClient.create(url);复制代码1复制代码1// 从Spring Ioc容器中拿webClient对象复制代码1ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");复制代码1client = ctx.getBean("webClient", WebClient.class);复制代码1}复制代码1复制代码1@After复制代码1public void destory(){复制代码1}复制代码1复制代码1@Test复制代码1public void testGet() {复制代码1System.out.println(client.path("sample").accept(MediaType.TEXT_PLAIN).get(String.class));复制代码1}复制代码1复制代码1@Test复制代码1public void testRequest() {复制代码1System.out.println(client.path("sample/request/234234").accept(MediaType.TEXT_PLAIN).get(String.class));复制代码1}复制代码1复制代码1@Test复制代码1public void testBean() {复制代码1User user = client.path("sample/bean/{id}", 25).accept(MediaType.APPLICATION_XML).get(User.class);复制代码1System.out.println(user);复制代码1}复制代码1复制代码1@Test复制代码1public void testList() {复制代码1System.out.println(client.path("sample/list").accept(MediaType.APPLICATION_XML).get(Users.class).getUsers());复制代码1}复制代码1复制代码1@Test复制代码1public void testMap() {复制代码1System.out.println(client.path("sample/map").accept(MediaType.APPLICATION_XML).get(MapBean.class).getMap());复制代码1}复制代码1复制代码1@Test复制代码1public void testDeleteData() {复制代码1client.path("sample/removeData/23").delete();复制代码1}复制代码1复制代码1@Test复制代码1public void testPostData() {复制代码1User user = new User();复制代码1user.setId(21432134);复制代码1user.setAddress("hoojo#gz");复制代码1user.setEmail("hoojo_@126.com");复制代码1user.setName("hoojo");复制代码1System.out.println(client.path("sample/postData").accept(MediaType.APPLICATION_XML).post(user, User.class));复制代码1}复制代码1复制代码1@Test复制代码1public void testPutData() {复制代码1User user = new User();复制代码1user.setId(21432134);复制代码1System.out.println(client.path("sample/putData/1").accept(MediaType.APPLICATION_XML).put(user).getEntity());复制代码1}复制代码1}如果你喜欢用Spring的方式,还需要在applicationContext-client.xml中增加如下配置复制代码1<?xml version="1.0" encoding="UTF-8"?>复制代码1<beans xmlns="http://www.springframework.org/schema/beans"复制代码1xmlns:context="http://www.springframework.org/schema/context"复制代码1xmlns:jaxws="http://cxf.apache.org/jaxws"复制代码1xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"复制代码1xsi:schemaLocation="http://www.springframework.org/schema/beans复制代码1http://www.springframework.org/schema/beans/spring-beans-3.0.xsd复制代码1http://www.springframework.org/schema/context复制代码1http://www.springframework.org/schema/context/spring-context-3.0.xsd复制代码1http://cxf.apache.org/jaxws复制代码1http://cxf.apache.org/schemas/jaxws.xsd">复制代码1复制代码1<bean id="webClient" class="org.apache.cxf.jaxrs.client.WebClient" factory-method="create">复制代码1<constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />复制代码1</bean>复制代码1复制代码1</beans>这种是利用WebClient对象来调用WebService,还有一种方法也可以调用WebService,代码如下:
复制代码1// 手动创建复制代码1//RESTSample sample = JAXRSClientFactory.create("http://localhost:8000/CXFWebService/rest", RESTSample.class);复制代码1复制代码1// 从Spring Ioc容器中拿webClient对象复制代码1ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");复制代码1RESTSample sample = ctx.getBean("restSampleBean", RESTSample.class);复制代码1复制代码1System.out.println(sample);复制代码1复制代码1System.out.println(sample.doGet());复制代码1//System.out.println(sample.doRequest("haha", null, null));复制代码1System.out.println(sample.getBean(22));复制代码1System.out.println(sample.getList());复制代码1System.out.println(sample.getMap().getMap());复制代码1User user = new User();复制代码1user.setId(21432134);复制代码1user.setAddress("hoojo#gz");复制代码1user.setEmail("hoojo_@126.com");复制代码1user.setName("hoojo");复制代码1System.out.println(sample.postData(user));复制代码1System.out.println(sample.putData(111, user));复制代码1sample.deleteData(2);这种方式相对比WebClient要简单,直接使用接口中的方法即可。同样如果你要整合到Spring可以在applicationContext-client.xml中增加配置如下:
复制代码1<bean id="restSampleBean" class="org.apache.cxf.jaxrs.client.JAXRSClientFactory" factory-method="create">复制代码1<constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />复制代码1<constructor-arg type="java.lang.Class" value="com.hoo.service.RESTSample" />复制代码1</bean>
执行以上方法可以看到控制台打印结果如下:
复制代码1client console复制代码1org.apache.cxf.jaxrs.client.ClientProxyImpl@1cf7491复制代码1this is get rest request复制代码122#JojO#null#null复制代码1com.hoo.entity.Users@16eb6bc复制代码1{key-0=0#JojO-0#null#null, key-1=1#JojO-1#null#null, key-2=2#JojO-2#null#null, key-3=3#JojO-3#null#null}复制代码121432134#jojo##12321321#hoojo_@126.com#hoojo#gz复制代码1111#hoojo#hoojo_@126.com#hoojo#gz复制代码1复制代码1server console复制代码1####getBean#####复制代码1id:22复制代码1Method:GET复制代码1uri:sample/bean/22复制代码1{id=[22]}复制代码1####getList#####复制代码1Method:GET复制代码1uri:sample/list复制代码1{}复制代码1####getMap#####复制代码1Method:GET复制代码1uri:sample/map复制代码1{}复制代码121432134#hoojo#hoojo_@126.com#hoojo#gz复制代码1#####putData#####复制代码121432134#hoojo#hoojo_@126.com#hoojo#gz复制代码1111#hoojo#hoojo_@126.com#hoojo#gz复制代码1#######deleteData#######2就这样,整合restful WebService成功。
****************************************************************************************************
<jaxrs:server id="restServiceContainer" address="/rest">
<jaxrs:serviceBeans>
<ref bean="restSample" />
</jaxrs:serviceBeans>
请问这里bean的值有什么特殊要求吗
就是spring容器中的Bean对象,并且相关的WebService方法和类需要添加对应的@annotated
最后
以上就是暴躁荷花最近收集整理的关于CXF WebService 7 - Spring整合CXF,发布RSETful 风格WebService的全部内容,更多相关CXF内容请搜索靠谱客的其他文章。
发表评论 取消回复