分布式(基础)-WebService(五)

简介: 分布式(基础)-WebService(五)

WebService-CXF

CXF:也是用来开发WebService的。不依赖于任何的服务端端的接口和类

收到的是xml文件,但是需要自己去解析xmlw文件。

1、CXF也能整合到SpringBoot中去的。

1.1、搭建Spring CXF+RESTFUL风格的WebService

1.2、引入相关的依赖如下:

  1. <dependencies>
  2.  <dependency>
  3.    <groupId>org.springframework</groupId>
  4.    <artifactId>spring-context</artifactId>
  5.    <version>${spring.version}</version>
  6.  </dependency>
  7.  <dependency>
  8.    <groupId>org.springframework</groupId>
  9.    <artifactId>spring-web</artifactId>
  10.    <version>${spring.version}</version>
  11.  </dependency>
  12.  <!--CXF相关包-->
  13.  <dependency>
  14.    <groupId>org.apache.cxf</groupId>
  15.    <artifactId>cxf-rt-transports-http</artifactId>
  16.    <version>${cxf.version}</version>
  17.  </dependency>
  18.  <dependency>
  19.    <groupId>org.apache.cxf</groupId>
  20.    <artifactId>cxf-rt-frontend-jaxws</artifactId>
  21.    <version>${cxf.version}</version>
  22.  </dependency>
  23.  <dependency>
  24.    <groupId>org.apache.cxf</groupId>
  25.    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
  26.    <version>${cxf.version}</version>
  27.  </dependency>
  28.  <dependency>
  29.    <groupId>javax.ws.rs</groupId>
  30.    <artifactId>javax.ws.rs-api</artifactId>
  31.    <version>2.0</version>
  32.  </dependency>
  33.  <!-- web service -->
  34.  <dependency>
  35.    <groupId>javax.ws.rs</groupId>
  36.    <artifactId>jsr311-api</artifactId>
  37.    <version>1.1.1</version>
  38.  </dependency>
  39.  <dependency>
  40.    <groupId>com.fasterxml.jackson.jaxrs</groupId>
  41.    <artifactId>jackson-jaxrs-json-provider</artifactId>
  42.    <version>2.9.7</version>
  43.  </dependency>

  44.  <dependency>
  45.    <groupId>javax.servlet</groupId>
  46.    <artifactId>servlet-api</artifactId>
  47.    <version>2.5</version>
  48.  </dependency>
  49.    <spring.version>4.3.18.RELEASE</spring.version>
  50.    <jackson.version>2.9.6</jackson.version>
  51.    <cxf.version>3.2.7</cxf.version>

1.3、编写WebService终端接口的API和实体类的代码如下:

  1. package com.xf.demo.service;

  2. import com.xf.demo.domain.User;

  3. import javax.jws.WebService;
  4. import javax.ws.rs.*;
  5. import javax.ws.rs.core.MediaType;
  6. import javax.ws.rs.core.Response;
  7. import java.util.List;

  8. @WebService
  9. @Path(value="/users/")
  10. public interface UserService {

  11.    @GET
  12.    @Path("/")  //http://ip:port/users
  13.    @Produces({MediaType.APPLICATION_JSON})
  14.    List<User> getUsers();

  15.    @DELETE
  16.    @Path("{id}")  //http://ip:port/users/1
  17.    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) //请求accept
  18.    Response delete(@PathParam("id") int id);

  19.    @GET
  20.    @Path("{id}") //http://ip:port/users/1
  21.    @Produces(MediaType.APPLICATION_JSON)
  22.    User getUser(@PathParam("id") int id);

  23.    @POST
  24.    @Path("/add")
  25.    @Produces({MediaType.APPLICATION_JSON})
  26.    Response add(User user);

  27.    @PUT
  28.    @Path("/update")
  29.    Response update(User user);
  30. }
  31. package com.xf.demo.service;
  32. import com.xf.demo.domain.User;
  33. import com.xf.demo.result.Response;
  34. import org.springframework.stereotype.Service;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.concurrent.CopyOnWriteArrayList;
  38. @Service
  39. public class UserServiceImpl implements UserService {
  40.    public static List<User> users=null;
  41.    static{
  42.        users=new CopyOnWriteArrayList<>();
  43.        users.add(new User(1001,"张三",20,new Date()));
  44.        users.add(new User(1002,"王五",21,new Date()));
  45.        users.add(new User(1003,"赵六",22,new Date()));
  46.        users.add(new User(1004,"田七",23,new Date()));

  47.    }
  48.    @Override
  49.    public List<User> getUsers() {
  50.        return users;
  51.    }

  52.    @Override
  53.    public Response delete(int id) {
  54.        int size=users.size();
  55.        for(User user:users){
  56.            if(user.getId().intValue()==id){
  57.                users.remove(user);
  58.            }
  59.        }
  60.        if(users.size()<size){
  61.            return new Response(0,"success",null);
  62.        }else{
  63.            return new Response(1,"fail",null);
  64.        }

  65.    }

  66.    @Override
  67.    public User getUser(int id) {
  68.        return users.get(id-1);
  69.    }

  70.    @Override
  71.    public Response add(User user) {
  72.        users.add(user);
  73.        return new Response(0,"success",null);
  74.    }

  75.    @Override
  76.    public Response update(User user) {
  77.        return null;
  78.    }
  79. }

cxf格式的webService不是把接口发不出去,而是像RestFul形式的去访问。

cxf返回的是即是json也可以是xml文件,因为在cxf中提供了转换器可以把xml文件转换成json的格式

1.4、发布下:这就是restful的json

1.5、cxf这种方式可以设置不同的请求头,来控制 返回的是xml还是json,比前几种更方便。

1.6、如果想要获取的是xml的话:需要在在实体类上加上注解:

1.7、在次访问下delete的方法,请求的结果如下:

革命尚未成功,继续努力!!!!

相关文章
|
4月前
|
XML Java 数据格式
分布式(基础)-WebService(四)
分布式(基础)-WebService(四)
|
4月前
|
XML Java 数据格式
分布式(基础)-WebService(二)
分布式(基础)-WebService(二)
|
4月前
|
XML Java Apache
分布式(基础)-WebService(三)
分布式(基础)-WebService(三)
|
4月前
|
XML JSON 网络协议
分布式(基础)-WebService(一)
分布式(基础)-WebService(一)
|
3月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
5月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
141 2
基于Redis的高可用分布式锁——RedLock
|
1月前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
104 5
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
70 8
|
2月前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
61 16