简单使用CXF实现webserver(rs的独立发布)

简单使用cxf_rs的方式实现webserver

1创建maven project java项目

2,在maven文件中导入相关依赖

<dependencies>
    <!--使用 CXF 的RS开发模式 --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>3.1.7</version></dependency>
      <!-- 内置jetty 的 WEB服务器--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.1.1</version></dependency><!-- 使用日志 --><dependency><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>1.7.12</version></dependency></dependencies>

 

2.创建实体类 Car

package cn.test.cxf.domain;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "Car")    //指定序列化(转换 XML、JSON) 对象名字
public class Car {private Integer id;private String carName;private Double price;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getCarName() {return carName;}public void setCarName(String carName) {this.carName = carName;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";}}

3.创建实体类User

package cn.test.cxf.domain;import java.util.ArrayList;
import java.util.List;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "User")
public class User {private Integer id;private String username;private String city;private List<Car> cars = new ArrayList<Car>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public List<Car> getCars() {return cars;}public void setCars(List<Car> cars) {this.cars = cars;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";}}

4.编写Service

package cn.test.cxf.service;import java.util.List;import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;import cn.test.cxf.domain.User;
@Path("/userService")
@Produces("*/*")
public interface IUserService {@POST@Path("/user")@Consumes({ "application/xml", "application/json" })public void saveUser(User user);@PUT@Path("/user")@Consumes({ "application/xml", "application/json" })public void updateUser(User user);@GET@Path("/user")@Produces({ "application/xml", "application/json" })public List<User> findAllUsers();@GET@Path("/user/{id}")@Consumes("application/xml")@Produces({ "application/xml", "application/json" })public User finUserById(@PathParam("id") Integer id);@DELETE@Path("/user/{id}")@Consumes("application/xml")public void deleteUser(@PathParam("id") Integer id);
}

5.编写service实现类,实现service中的方法

package cn.test.cxf.service;import java.util.ArrayList;
import java.util.List;import cn.test.cxf.domain.Car;
import cn.test.cxf.domain.User;public class UserServiceImpl implements IUserService {public void saveUser(User user) {System.out.println("save user:" + user);}public void updateUser(User user) {System.out.println("update user:" + user);}public List<User> findAllUsers() {List<User> users = new ArrayList<User>();User user1 = new User();user1.setId(1);user1.setUsername("小明");user1.setCity("北京");List<Car> carList1 = new ArrayList<Car>();Car car1 = new Car();car1.setId(101);car1.setCarName("保时捷");car1.setPrice(1000000d);carList1.add(car1);Car car2 = new Car();car2.setId(102);car2.setCarName("宝马");car2.setPrice(400000d);carList1.add(car2);user1.setCars(carList1);users.add(user1);User user2 = new User();user2.setId(2);user2.setUsername("小丽");user2.setCity("上海");users.add(user2);return users;}public User finUserById(Integer id) {if (id == 1) {User user1 = new User();user1.setId(1);user1.setUsername("小明");user1.setCity("北京");return user1;}return null;}public void deleteUser(Integer id) {System.out.println("delete user id :" + id);}}

6.编写服务器端发布项目

package cn.test.cxf.server;import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;import cn.test.cxf.domain.Car;
import cn.test.cxf.domain.User;
import cn.test.cxf.service.IUserService;
import cn.test.cxf.service.UserServiceImpl;public class Rs_server {public static void main(String[] args) {IUserService userService = new UserServiceImpl();JAXRSServerFactoryBean jaxrsServerFactoryBean=new JAXRSServerFactoryBean();jaxrsServerFactoryBean.setResourceClasses(User.class,Car.class);jaxrsServerFactoryBean.setServiceBean(userService);//设置访问地址jaxrsServerFactoryBean.setAddress("http://localhost:9996");//发布服务
        jaxrsServerFactoryBean.create();}
}

7.编写客户端程序

首先需要导入cxf-rt-rs-client客户端依赖

导入相关依赖

   <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-rs-client</artifactId><version>3.1.7</version></dependency>

创建客户端程序

package cn.test.cxf.server;import java.util.Collection;import javax.ws.rs.core.MediaType;import org.apache.cxf.jaxrs.client.WebClient;import cn.test.cxf.domain.User;public class ClientTest {public static void main(String[] args) {Collection<? extends User> collection = WebClient.create("http://localhost:9996/userService/user").accept(MediaType.APPLICATION_XML).getCollection(User.class);System.out.println(collection);//添加用户User user = new User();WebClient.create("http://localhost:9996/userService/user").type(MediaType.APPLICATION_XML).post(user);}
}

测试完成输出结果是:

[User [id=1, username=小明, city=北京, cars=[Car [id=101, carName=保时捷, price=1000000.0], Car [id=102, carName=宝马, price=400000.0]]], User [id=2, username=小丽, city=上海, cars=[]]]

END!

:-D!



 

转载于:https://www.cnblogs.com/johnny-ylp/p/7828075.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作158:vue里面为什么要加key

没有key <div id"app"><div><input type"text" v-model"name"><button click"add">添加</button></div><ul><li v-for"(item, i) in list"><input type"checkbox&…

Android 人脸识别拍照demo

1、活体与照片。效果&#xff0c;捕获人脸 2、活体人脸识别&#xff1a;https://blog.csdn.net/meixi_android/article/details/88690445 运行效果&#xff1a; 自定义获取人脸view /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;13164716840163.com* 日期&#x…

多进程进阶

一 multiprocessing模块介绍 python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源&#xff08;os.cpu_count()查看&#xff09;&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子进…

typescript 安装

记录基本的typescript 安装过程。 1、安装 查看最新的版本号 npm show typescript去npm服务器读取包最新的信息&#xff1a; npm install -g typescript使用tsc -v查看版本号 使用npm bin -g查看安装目录 2、使用tsc index.ts就可以将ts文件编译成js文件。 官方在线实练…

linux中修改字符编码

一. ubuntu修改字符编码 1. 添加字符编码&#xff0c;例如zh_CN.UTF-8&#xff0c;有两种方式 方法1&#xff1a;locale-gen zh_CN.UTF-8 #locale-gen命令只在ubuntu中才有 方法2&#xff1a;在/var/lib/locales/supported.d/local中添加字符集zh_CN.UTF-8&#xff0c;保存后…

iview代码片段 去除水平menu底部横线

此处记录日常写的小代码片段 直接使用iview的Menu在底部会出现一条border线&#xff0c;而我的使用场景&#xff0c;不需要border线。所以我就覆盖一下它原来的样式&#xff0c;就可以了。 代码&#xff1a; .ivu-menu-light {&:after {height: 0px !important;}}效果&a…

工作161:eachart渲染步骤

第一步 页面 第二步 第三步 方法调用

vue js xlsx 读取 本地 excel

最近在写一个人力资源管理系统&#xff0c;主要目的是将本地的excel文件读取解析&#xff0c;将有效数据传到后台。 下文介绍流程&#xff0c;文末附有参考文章。 1、安装npm包xlsx yarn add xlsx2、结合上传组件和自己写的读取方法readXLSX&#xff0c;可以进行本地excel读…

工作163:eachrt修改

<template><div><el-card><el-card><time-selects GetTime"GetTime"></time-selects><!--第一步 页面--><div id"main" :style"{ width: 1000px, height: 300px }"></div><div id&quo…

Android 使用ViewPager实现view轮播效果,单个item分页样式,多个item分页样式,横向listview

效果 单个item样式 多个item样式 横向item 自定义viewpager——可开关切换动画 public class NoAnimationViewPager extends ViewPager {public NoAnimationViewPager(Context context) {super(context);}public NoAnimationViewPager(Context context, AttributeSet attrs) …

工作164:对父和混入的理解

1点击按钮看编辑事件 2点击编辑之后 对当前页面的方法进行调用 3找到子组件下面的混入方法 create下面引入混入 4找到子组件混入下面的混入方法 5找到下面的getlist方法

工作165:混入调用的时候

直接created里面定义 不需要在其他位置进行过多操作

工作166:错误的处理方式

1这种处理没有数据 2 这样处理勉强调用了接口 但是获取数据还是有问题

07异常处理

1、 【请尝试解释以下奇怪的现象&#xff01;】 int i1, j0, k; ki/j; 代码在运行时会引发异常 上边代码在运行时不会引发异常 浮点数除以0&#xff1a;Infinity 可以使用javap去反汇编两个示例程序的.class文件&#xff08;一个是AboutException.class&#xff0c;另一个是Thr…

工作166:正确eachrt渲染方式

1第一步 2第二步 3第三步

Effective C++: 06继承与面向对象设计

32&#xff1a;确定你的public继承塑模出is-a关系 以C进行面向对象编程&#xff0c;最重要的一个规则是&#xff1a;public继承表示的是"is-a"&#xff08;是一种&#xff09;的关系。 如果令class D以public形式继承class B&#xff0c;你便是告诉编译器说&#xff…

工作168:代码中的删除逻辑处理

1首先找到对应方法里面的删除方法 2点击之后进行删除操作 在当前方法里面直接进行混入删除 删除结束

Android侧滑删除-RecyclerView轻松实现高效的侧滑菜单

1 删除整个RecyclerView hisList.clear(); hisAdapter.notifyDataSetChanged(); mScanListAdapter.setNewData(null); 刚开始只是使用了list.clear() 方法就是没有效果&#xff0c;最后想起来了忘记了notifyDataSetChanged 刷新了 2 RecyclerView 删除Item hisList.remov…