前面文章记录了在spring中如何整合cxf开发webservice客户端和服务端,其实,相较于原生开发方式,已经有了不少优化。rest风格的开发,作为一种极为流行的开发规范,可以帮助我们更加简洁高效的发布服务,接收服务。

客户端

  1. 添加依赖
    之前的都是jaxws,现在都将w编程了r,也就是rest的意思。
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>3.3.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.3.5</version><scope>compile</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-rs-client</artifactId><version>3.3.5</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-extension-providers --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-rs-extension-providers</artifactId><version>3.3.5</version></dependency><!-- https://mvnrepository.com/artifact/org.codehaus.jettison/jettison --><dependency><groupId>org.codehaus.jettison</groupId><artifactId>jettison</artifactId><version>1.4.0</version></dependency>
  1. 配置web.xml
    和之前的没有更多的变动
<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>cXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>cXFServlet</servlet-name><url-pattern>/webService/*</url-pattern></servlet-mapping><!--  2.配置spring容器--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value><!--    3.监听器--></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
  1. 编写实体类
    @XmlRootElement注解指定了对象序列化为json/xml过后的根节点。
@XmlRootElement(name="student")
public class Student {private Integer id;private String name;private String gender;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +'}';}
}
  1. service接口和实现类
    IStudnetService 接口,其中: @Path表示访问当前服务接口对应的路径; @Consumes指定服务器支持的接收的数据类型; @Produces指定服务器支持的返回的数据类型
public interface IStudnetService {/*** post对应的是insert操作* get对应的是select操作* put对应的是update操作* delete对应的是delete操作** @param student*/@POST@Path("/student")@Consumes({"application/xml","application/json"})public void addStudent(Student student);@PUT@Path("/student")@Consumes({"application/xml","application/json"})public void saveStudent(Student student);@GET@Path("/student/{id}")@Consumes({"application/xml","application/json"})@Produces({"application/xml","application/json"})public Student getStudentById(@PathParam("id") Integer id);@GET@Path("/student")@Produces({"application/xml","application/json"})public List<Student> getStudent();@DELETE@Path("/student/{id}")@Consumes({"application/xml","application/json"})public void deleteStudent(@PathParam("id") Integer id);
}

StudentService 实现类
这里模拟rest风格的增删改查,当客户端调用服务时,服务端打印日志记录。

public class StudentService implements IStudnetService {@Overridepublic void addStudent(Student student) {System.out.println(student.getName()+"学生信息添加成功!");}@Overridepublic void saveStudent(Student student) {System.out.println(student.getName()+"学生信息修改成功!");}@Overridepublic Student getStudentById(Integer id) {Student student = new Student();student.setId(id);student.setAge(13);student.setGender("男");student.setName("william");System.out.println("id为"+id+"学生信息查询成功!");return student;}@Overridepublic List<Student> getStudent() {Student student1 = new Student();student1.setId(1);student1.setAge(13);student1.setGender("男");student1.setName("william");Student student2 = new Student();student2.setId(2);student2.setAge(12);student2.setGender("女");student2.setName("elaine");List<Student> studentList = new ArrayList<Student>();studentList.add(student1);studentList.add(student2);System.out.println("成功查询所有学生信息成功!");return studentList;}@Overridepublic void deleteStudent(Integer id) {System.out.println("id为"+id+"的学生信息删除成功!");}
}
  1. 配置applicationContext.xml
    配置服务的方式基本没有什么变化,需要注意一下jaxrs标签以及对应的命名空间。
<?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:context="http://www.springframework.org/schema/context"xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd "><jaxrs:server address="/studentService"><jaxrs:serviceBeans><bean class="com.wuwl.service.impl.StudentService"></bean></jaxrs:serviceBeans></jaxrs:server></beans>
  1. 启动tomcat服务
    启动成功后,我们通过浏览器访问:http://localhost:8081/webService/studentService/student/123,会在页面上显示:
<?xml version="1.0" encoding="UTF-8" standalone="true"?><student><age>13</age><gender>男</gender><id>123</id><name>william</name></student>

客户端
客户端的编写则更加简洁明了了。
7. 引入相关的依赖
8. 导入实体类
这里需要导入Student这个实体类。
9. 编写测试代码Client
通过webClient对象调用服务,发送不同的请求类型,自动匹配对应的服务方法

public class Client {@Testpublic void testPost(){Student st1 = new Student();st1.setId(10);st1.setName("jack");st1.setGender("男");st1.setAge(15);//通过webClient对象远程调用服务WebClient.create("http://localhost:8081/webService/studentService/student").type(MediaType.APPLICATION_JSON).post(st1);}@Testpublic void testDelete(){WebClient.create("http://localhost:8081/webService/studentService/student/12").type(MediaType.APPLICATION_JSON).delete();}@Testpublic void testPut(){Student st1 = new Student();st1.setId(10);st1.setName("marry");st1.setGender("/女");st1.setAge(15);//通过webClient对象远程调用服务WebClient.create("http://localhost:8081/webService/studentService/student").type(MediaType.APPLICATION_JSON).put(st1);}@Testpublic void testGetById(){Student student = WebClient.create("http://localhost:8081/webService/studentService/student/12").accept(MediaType.APPLICATION_JSON).get(Student.class);System.out.println(student);}@Testpublic void testGet(){List<Student> studentList = (List<Student>) WebClient.create("http://localhost:8081/webService/studentService/student").accept(MediaType.APPLICATION_JSON).getCollection(Student.class);System.out.println(studentList);}
}

我们自上而下依次执行单元测试方法,由于除了GET请求以外,都没有返回值,客户端看不到任何输出,而服务端可以查看对应请求记录。

jack学生信息添加成功!
id为12的学生信息删除成功!
marry学生信息修改成功!

接着,我们测试testGetById方法。
客户端输出:

Student{id=12, name='william', gender='男', age=13}

服务端输出:

id为12学生信息查询成功!

最后,测试testGet方法。
客户端输出:

[Student{id=1, name='william', gender='男', age=13}, Student{id=2, name='elaine', gender='女', age=12}]

服务端输出:

成功查询所有学生信息成功!

spring整合cxf开发rest风格的webservice接口(客户端服务端)相关推荐

  1. 使用Apache CXF开发REST风格的WebService

    使用Apache CXF开发REST风格的WebService REST的概述: REST(表现层状态转化),是一种新的软件架构风格,它以资源为核心,使用http,url,xml以及html等流行协议 ...

  2. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  3. Spring整合CXF,发布RSETful 风格WebService

    这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF ...

  4. Spring boot+CXF开发WebService Demo

    本文转载自: https://www.cnblogs.com/fuxin41/p/6289162.html 作者:fuxin41 转载请注明该声明. 最近工作中需要用到webservice,而且结合s ...

  5. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  6. 在原有的SSH项目上开发RESTful风格的HTTP接口

    最近做一个需求,其中有个节点涉及到需要在传统的SSH项目中开发RESTful风格的HTTP接口,供请求方访问,获取结果,响应处理结果,其开发风格与spring cloud中控制器(controller ...

  7. spring整合cxf,轻松编写webService客户端、服务端

    WebService是一种跨编程语言.跨操作系统平台的远程调用技术,广泛应用在实际开发,接口实现,系统集成. 服务端 List item 添加maven依赖 项目中除了spring相关的依赖以外,还需 ...

  8. Spring整合CXF webservice restful 实例

    webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自己对比下就可以了. 用到的基础类 User.java [源码 ...

  9. spring整合CXF

    CXF也就是用于发布接口的webservice的框架. 发布服务:使用spring和cxf整合的标签<jaxws:server 客户端发布服务:使用springcxf整合的标签<jaxws ...

最新文章

  1. C语言编程之格式化输出函数printf()说明
  2. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...
  3. 阿里影业出品影片《1917》斩获奥斯卡多项大奖 有望国内院线上映
  4. 继续来研究JScript解析引擎的GC问题
  5. 从码农到架构师,如何成长为技术领导者?
  6. Nginx源码分析 - 初探Nginx的架构(01)
  7. 多普勒优化的非匹配滤波器
  8. 朱晔的互联网架构实践心得S2E3:品味Kubernetes的设计理念
  9. vue2+vant适配750设计稿
  10. 虚拟化是什么,虚拟化主要分为哪几种?
  11. Python | 阿尔法程序的控制结构
  12. JAVA中获取文件MD5值的四种方法
  13. 关于chrome浏览器不能正常访问百度的解决方法
  14. Freemarker使用mht制作导出word模板
  15. (扩展)BSGS与高次同余方程
  16. CCS7.2的下载、安装及打开CCS3.3工程文件
  17. Win10系统桌面图标突然变成白色如何恢复
  18. 牛客每日练习----调皮的孩纸,删除子串,哲哲的疑惑
  19. 自定义json格式-解析为对象
  20. 手机端页面的自适应设计的开发思路

热门文章

  1. 在JavaScript中复制数组的最快方法-切片与“ for”循环
  2. 在WPF中,x:Name和Name属性之间有什么区别?
  3. 您如何合并两个Git存储库?
  4. dw属性面板 的HTML,Dreamweaver中AP Div属性面板
  5. Netty网络编程聊天项目
  6. mysql centos7安装_Linux——CentOS7之mysql5.7安装与配置
  7. flutter 自定义键盘_Flutter 引擎架构
  8. Linux命令:find
  9. c 语言 循环判断语句,C值循环语句(七)
  10. 全向轮机器人应用平台