Apache CXF实现的RESTful形式的webservices

简介:

(1)项目结构:

在这里,我没有新建一个项目,而是在上一个项目的基础上实现的,具体来说就是新建了3个文件,如下图所示:

wKiom1cLoYTQuEiOAABKJXINyo0227.png

其中,User类是一个普通的实体类,RestService和RestServiceImpl类分别表示服务接口和它的实现类

(2)User.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package  cn.zifangsky.entity;
 
import  javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement (name= "userInfo" )
public  class  User {
     private  int  id;
     private  String name;
     private  String contact;
     
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     public  String getContact() {
         return  contact;
     }
     public  void  setContact(String contact) {
         this .contact = contact;
     }
 
}

(3)RestService.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package  cn.zifangsky.service;
 
import  javax.ws.rs.GET;
import  javax.ws.rs.Path;
import  javax.ws.rs.PathParam;
import  javax.ws.rs.Produces;
import  javax.ws.rs.core.MediaType;
 
import  cn.zifangsky.entity.User;
 
public  interface  RestService {
 
     @GET   
     @Path (value= "/user/{id}" )
     @Produces (value = { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     public  User getUser( @PathParam ( "id" int  id);
}

(4)RestServiceImpl.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package  cn.zifangsky.service.impl;
 
import  cn.zifangsky.entity.User;
import  cn.zifangsky.service.RestService;
 
public  class  RestServiceImpl  implements  RestService {
     public  User getUser( int  id) {
         User user =  new  User();
         user.setId(id);
         user.setName( "zifangsky" );
         user.setContact( "http://www.zifangsky.cn" );
         return  user;
     }
 
}

(5)web.xml不变,修改service-beans.xml:

添加<jaxrs:server></jaxrs:server>节点,表示是RESTful服务

1
2
3
4
5
6
7
8
9
10
11
< jaxrs:server  id = "userRest"  address = "/services/rest" >
         < jaxrs:serviceBeans >
             < bean  class = "cn.zifangsky.service.impl.RestServiceImpl"  />
         </ jaxrs:serviceBeans >
         
         < jaxrs:extensionMappings >
             < entry  key = "json"  value = "application/json"  />
             < entry  key = "xml"  value = "application/xml"  />
         </ jaxrs:extensionMappings >
         
     </ jaxrs:server >

添加之后,service-beans.xml这个文件的完整代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< beans  xmlns = "http://www.springframework.org/schema/beans"
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"  xmlns:jaxws = "http://cxf.apache.org/jaxws"
     xmlns:jaxrs = "http://cxf.apache.org/jaxrs"  xmlns:soap = "http://cxf.apache.org/bindings/soap"
     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
     http://cxf.apache.org/jaxrs
     http://cxf.apache.org/schemas/jaxrs.xsd ">
     
     < bean  id = "outLoggingInterceptor"  class = "org.apache.cxf.interceptor.LoggingOutInterceptor"  />
     < bean  id = "loggingFeature"  class = "org.apache.cxf.feature.LoggingFeature"  />
     < bean  id = "inLoggingInterceptor"  class = "org.apache.cxf.interceptor.LoggingInInterceptor"  />
     < jaxws:server  id = "sayHelloServices"  serviceClass = "cn.zifangsky.service.CXFService"  address = "/services/soap"  >
         < jaxws:serviceBean >
             < bean  class = "cn.zifangsky.service.impl.CXFServiceImpl"  />
         </ jaxws:serviceBean >
         < jaxws:outInterceptors >
             < ref  bean = "outLoggingInterceptor"  />
         </ jaxws:outInterceptors >
         < jaxws:inInterceptors >
             < ref  bean = "inLoggingInterceptor"  />
         </ jaxws:inInterceptors >
         < jaxws:features >
             < ref  bean = "loggingFeature"  />
             < wsa:addressing  xmlns:wsa = "http://cxf.apache.org/ws/addressing"  />
         </ jaxws:features >
         
     </ jaxws:server >
     
     < jaxrs:server  id = "userRest"  address = "/services/rest" >
         < jaxrs:serviceBeans >
             < bean  class = "cn.zifangsky.service.impl.RestServiceImpl"  />
         </ jaxrs:serviceBeans >
         
         < jaxrs:extensionMappings >
             < entry  key = "json"  value = "application/json"  />
             < entry  key = "xml"  value = "application/xml"  />
         </ jaxrs:extensionMappings >
         
     </ jaxrs:server >
     
</ beans >

(6)测试:

整个配置到这里已经就完成了,在tomcat中启动项目,效果是这样:

wKiom1cLolTTMtpyAAA8xO5An5M413.png

在浏览器中访问:http://localhost:8080/CXFDemo/services/rest/user/9

wKiom1cLom-Cpgi_AAA2aGvnaFk242.png

可以看出,结果是正确,到此全部配置结束




本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1762762,如需转载请自行联系原作者
相关文章
|
6月前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
50 1
|
7月前
|
Java API Apache
Apache CXF生成WebService的客户端
Apache CXF生成WebService的客户端
253 0
|
运维 Kubernetes Cloud Native
MSE 支持 Apache Shenyu 网关实现全链路灰度
我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。
579 7
MSE 支持 Apache Shenyu 网关实现全链路灰度
|
监控 Java 关系型数据库
Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
快速学习 Apache Flume-自定义 source(扩展)--功能测试实现
 Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
|
运维 Kubernetes Cloud Native
MSE支持Apache Shenyu网关实现全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
MSE支持Apache Shenyu网关实现全链路灰度
|
关系型数据库 MySQL 数据挖掘
使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris
本文通过实例来演示怎么通过Flink CDC 结合Doris的Flink Connector实现从Mysql数据库中监听数据并实时入库到Doris数仓对应的表中。
3358 0
使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris
|
存储 Java Apache
java积累——apache commons fileupload 实现文件上传
java积累——apache commons fileupload 实现文件上传
381 0
|
网络安全 Apache 数据安全/隐私保护
phpstudy集成下Apache配置SSL证书实现https加密访问
phpstudy集成下Apache配置SSL证书实现https加密访问
|
Cloud Native Java 数据处理
通过 MSE 实现基于Apache APISIX的全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
通过 MSE 实现基于Apache APISIX的全链路灰度
|
JavaScript Apache 开发者
通过 express 模拟 Apache 实现静态资源托管服务(补充)|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务(补充)