cxf整合spring发布rest服务

Posted code never lies

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cxf整合spring发布rest服务相关的知识,希望对你有一定的参考价值。

1.创建maven web项目并添加依赖

pom.xml

技术分享图片
 1 <properties>
 2       <webVersion>3.0</webVersion>
 3       <cxf.version>3.2.5</cxf.version>
 4       <spring.version>4.3.18.RELEASE</spring.version>
 5       <jettison.version>1.4.0</jettison.version>
 6   </properties>
 7   
 8   <dependencies>
 9         <!--spring依赖-->
10         <dependency>
11             <groupId>org.springframework</groupId>
12             <artifactId>spring-core</artifactId>
13             <version>${spring.version}</version>
14         </dependency> 
15           <dependency>
16                 <groupId>org.springframework</groupId>
17                 <artifactId>spring-web</artifactId>
18                 <version>${spring.version}</version>
19         </dependency>
20          <dependency>
21             <groupId>org.springframework</groupId>
22             <artifactId>spring-beans</artifactId>
23             <version>${spring.version}</version>
24         </dependency>
25         <dependency>
26             <groupId>org.springframework</groupId>
27             <artifactId>spring-context-support</artifactId>
28             <version>${spring.version}</version>
29         </dependency>
30         <dependency>
31             <groupId>org.springframework</groupId>
32             <artifactId>spring-context</artifactId>
33             <version>${spring.version}</version>
34         </dependency>
35      <!-- <dependency>
36             <groupId>org.springframework</groupId>
37             <artifactId>spring-aop</artifactId>
38             <version>${spring.version}</version>
39         </dependency>
40         -->
41         <dependency>
42             <groupId>org.slf4j</groupId>
43             <artifactId>slf4j-simple</artifactId>
44             <version>1.7.25</version>
45         </dependency>
46         
47   
48         <!-- cxf依赖 -->
49           <dependency>
50             <groupId>org.apache.cxf</groupId>
51             <artifactId>cxf-core</artifactId>
52             <version>${cxf.version}</version>
53         </dependency>
54           <dependency>
55             <groupId>org.apache.cxf</groupId>
56             <artifactId>cxf-rt-frontend-jaxws</artifactId>
57             <version>${cxf.version}</version>
58         </dependency>
59         <dependency>
60             <groupId>org.apache.cxf</groupId>
61             <artifactId>cxf-rt-transports-http</artifactId>
62             <version>${cxf.version}</version>
63         </dependency>
64         <dependency>
65             <groupId>org.apache.cxf</groupId>
66             <artifactId>cxf-rt-transports-http-jetty</artifactId>
67             <version>${cxf.version}</version>
68         </dependency>
69       
70         <!-- rest风格支持 -->
71         <dependency>
72             <groupId>org.apache.cxf</groupId>
73             <artifactId>cxf-rt-frontend-jaxrs</artifactId>
74             <version>${cxf.version}</version>
75         </dependency>
76         <dependency>
77             <groupId>org.apache.cxf</groupId>
78             <artifactId>cxf-rt-rs-extension-providers</artifactId>
79             <version>${cxf.version}</version>
80         </dependency>
81         <!-- json支持 -->
82         <dependency>
83             <groupId>org.codehaus.jettison</groupId>
84             <artifactId>jettison</artifactId>
85             <version>${jettison.version}</version>
86         </dependency>
87   </dependencies>
View Code

 

2.配置spring的applicationContext.xml

技术分享图片
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
 4     xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 6                         http://www.springframework.org/schema/beans/spring-beans.xsd
 7                         http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
 8                         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
 9                         http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
10   
11     <jaxrs:server address="/studentquery">
12         <jaxrs:serviceBeans>
13             <ref bean="studentInterface"/>
14         </jaxrs:serviceBeans>
15     </jaxrs:server>
16     
17     <!-- 服务实现类 -->
18     <bean id="studentInterface" class="cxf_rest_server.student.StudentInterfaceImpl"/>
19 </beans>
View Code

 

3.配置web.xml

技术分享图片
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>cxf_rest_spring_server</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   
13   
14   <!-- 配置spring文件环境 -->
15   <context-param>
16       <param-name>contextConfigLocation</param-name>
17     <param-value>classpath:applicationContext.xml</param-value>
18   </context-param>
19   
20   <!-- 监听器 -->
21   <listener>
22       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
23   </listener>
24   
25   
26   <!-- 配置CXF的Servlet -->
27   <servlet>
28       <servlet-name>CXF</servlet-name>
29       <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
30   </servlet>
31   <servlet-mapping>
32       <servlet-name>CXF</servlet-name>
33       <url-pattern>/ss/*</url-pattern>
34   </servlet-mapping>
35   
36 </web-app>
View Code

 

4.代码

实体类

技术分享图片
 1 package cxf_rest_server.student;
 2 
 3 import javax.xml.bind.annotation.XmlRootElement;
 4 
 5 @XmlRootElement(name="student")
 6 public class Student {
 7     private int id;
 8     private String name;
 9     public int getId() {
10         return id;
11     }
12     public void setId(int id) {
13         this.id = id;
14     }
15     public String getName() {
16         return name;
17     }
18     public void setName(String name) {
19         this.name = name;
20     }
21 }
View Code

SEI接口

技术分享图片
 1 package cxf_rest_server.student;
 2 
 3 import java.util.List;
 4 
 5 import javax.jws.WebService;
 6 import javax.ws.rs.GET;
 7 import javax.ws.rs.POST;
 8 import javax.ws.rs.Path;
 9 import javax.ws.rs.PathParam;
10 import javax.ws.rs.Produces;
11 import javax.ws.rs.core.MediaType;
12 
13 @WebService
14 @Path("/student")
15 public interface StudentInterface {
16     @POST
17     @Path("/query/{id}")
18     @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
19     public Student query(@PathParam("id")int id);
20     
21     
22     @GET
23     @Path("/queryList/{id}/{name}")
24     @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
25     public List<Student> queryList(@PathParam("id")int id,@PathParam("name")String name);
26 }
View Code

实现类

技术分享图片
 1 package cxf_rest_server.student;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class StudentInterfaceImpl implements StudentInterface {
 7 
 8     @Override
 9     public Student query(int id) {
10         Student student = new Student();
11         student.setId(1);
12         student.setName("小明");
13         return student;
14     }
15 
16     @Override
17     public List<Student> queryList(int id,String name) {
18         Student student1 = new Student();
19         student1.setId(1);
20         student1.setName("小明");
21         
22         Student student2 = new Student();
23         student2.setId(2);
24         student2.setName("小李");
25         
26         Student student3 = new Student();
27         student3.setId(3);
28         student3.setName("小华");
29         List<Student> list = new ArrayList<Student>();
30         list.add(student1);
31         list.add(student2);
32         list.add(student3);
33         return list;
34     }
35 
36 }
View Code

实体类注意添加@XmlRootElement注解

接口添加jaxrs注解,定义数据格式

 

5.部署至tomcat后打开浏览器采用以下格式访问

url-pattern:web.xml中定义的cxf的servlet拦截目录

address:applicationContext.xml中的<jaxrs:server>标签定义的address

path:在接口中使用@Path注解设定的值

http://ip:port/项目名/url-pattern/address/path/方法路径/参数

 

6.由于使用浏览器url的方式只能访问注解为@GET的方法,下面给出使用HttpClient访问服务的简单示例

添加以下依赖

 1 <properties>
 2       <httpClient.version>4.5.6</httpClient.version>
 3       <junit.version>4.9</junit.version>
 4   </properties>
 5   <dependencies>
 6     <dependency>
 7         <groupId>org.apache.httpcomponents</groupId>
 8         <artifactId>httpclient</artifactId>
 9         <version>${httpClient.version}</version>
10     </dependency>
11     <dependency>
12         <groupId>junit</groupId>
13         <artifactId>junit</artifactId>
14         <version>${junit.version}</version>
15         <scope>test</scope>
16     </dependency>
17     
18   </dependencies>
 1 package cxf_rest_server.student;
 2 
 3 import org.apache.http.HttpEntity;
 4 import org.apache.http.client.methods.CloseableHttpResponse;
 5 import org.apache.http.client.methods.HttpGet;
 6 import org.apache.http.client.methods.HttpPost;
 7 import org.apache.http.impl.client.CloseableHttpClient;
 8 import org.apache.http.impl.client.HttpClients;
 9 import org.apache.http.util.EntityUtils;
10 import org.junit.Test;
11 
12 /**
13  * 使用httpClient访问服务
14  * @author tele
15  *
16  */
17 public class StudentClient {
18     @Test
19     public void get() throws Exception{
20         //创建httpclient对象
21         CloseableHttpClient httpClient = HttpClients.createDefault();
22         //创建get对象
23         HttpGet get = new HttpGet("http://127.0.0.1:8080/cxf_rest_spring_server/ss/studentquery/student/queryList/100/123");
24         //执行请求
25         CloseableHttpResponse response = httpClient.execute(get);
26         int statusCode = response.getStatusLine().getStatusCode();
27         if(statusCode == 200){
28             HttpEntity entity = response.getEntity();
29             String result = EntityUtils.toString(entity,"utf-8");
30             System.out.println(result);
31         }
32         response.close();
33         httpClient.close();
34     }
35     
36     @Test
37     public void post() throws Exception {
38         CloseableHttpClient httpClient = HttpClients.createDefault();
39         HttpPost post = new HttpPost("http://127.0.0.1:8080/cxf_rest_spring_server/ss/studentquery/student/query/100");
40         CloseableHttpResponse response = httpClient.execute(post);
41         int statusCode = response.getStatusLine().getStatusCode();
42         if(statusCode == 200) {
43             HttpEntity entity = response.getEntity();
44             String result = EntityUtils.toString(entity,"utf-8");
45             System.out.println(result);
46         }
47         response.close();
48         httpClient.close();
49     }
50 }

 

7.数据的解析

拿到数据后,根据数据格式进行解析,如果是xml,可以使用jdom,dom4j

如果是json........

 

以上是关于cxf整合spring发布rest服务的主要内容,如果未能解决你的问题,请参考以下文章

[CXF REST标准实战系列] Spring4.0 整合 CXF3.0,实现测试接口(转)

Spring整合CXF之发布WebService服务

apache cxf rest服务中的Spring异常

cxf与spring的整合

CXF2.7整合spring发布webservice

webservice的cxf和spring整合发布