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,如需转载请自行联系原作者
相关文章
|
2月前
|
Java API Apache
Apache CXF生成WebService的客户端
Apache CXF生成WebService的客户端
|
存储 Java Apache
java积累——apache commons fileupload 实现文件上传
java积累——apache commons fileupload 实现文件上传
290 0
|
监控 Java 关系型数据库
Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
快速学习 Apache Flume-自定义 source(扩展)--功能测试实现
116 0
 Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
|
JavaScript Apache 开发者
通过 express 模拟 Apache 实现静态资源托管服务(补充)|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务(补充)
106 0
|
JSON JavaScript Apache
通过 express 模拟 Apache 实现静态资源托管服务|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务
130 0
|
运维 Kubernetes Cloud Native
MSE 支持 Apache Shenyu 网关实现全链路灰度
我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。
483 1
MSE 支持 Apache Shenyu 网关实现全链路灰度
|
运维 Kubernetes Cloud Native
MSE支持Apache Shenyu网关实现全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
MSE支持Apache Shenyu网关实现全链路灰度
|
Cloud Native Java 数据处理
通过 MSE 实现基于Apache APISIX的全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
通过 MSE 实现基于Apache APISIX的全链路灰度
|
弹性计算 前端开发 JavaScript
在阿里云ECS上配置Apache+wsgi实现blog的部署
利用Django框架搭建个人博客网站,将网站通过Apache+wsgi部署到阿里云服务器。主要采用html、css、javascript作为前端,并使用了JQuery框架和Bootstrap框架;采用django框架作为后台开发技术、后台数据库使用mysql。本篇幅着重于Django框架介绍、数据库mysql配置和服务器部署。
在阿里云ECS上配置Apache+wsgi实现blog的部署
|
算法 Apache
使用 Apache Doris HyperLogLog 实现近似去重
在实际的业务场景中,随着业务数据量越来越大,对数据去重的压力也越来越大,当数据达到一定规模之后,使用精准去重的成本也越来越高,在业务可以接受的情况下,通过近似算法来实现快速去重降低计算压力是一个非常好的方式,本文主要介绍 Doris 提供的 HyperLogLog(简称 HLL)是一种近似去重算法。
684 0

推荐镜像

更多