简单使用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

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

  1. java cxf服务端_webservice概述及cxf在Java开发中应用(二) 简单搭建cxf服务端

    首先我们下载cxf的jar包,我这里下载的是apache-cxf-3.0.4这个版本,目前最新的. Eclipse里面新建一个Java project,在工程中引入需要的jar: 这些包里面包含了je ...

  2. webservice 之 Java CXF实战效果 RS WS(二)

    为什么80%的码农都做不了架构师?>>>    两种实现第一种RS 定义接口类 public interface ExampleRestfulI {/*** url:http://l ...

  3. Python开发一个APP居然如此之简单?老王自学三月就独立开发了!

    很久很久之前我就想开发一款app玩一下,不过因为不是很熟悉Java,也没有开发app的经验,因此一直没去弄.最近学了python就想用它开发一个app,google查找之后发现路子还是很多的,现在也有 ...

  4. 使用Apache cxf 和Spring在Tomcat下发布Webservice指南

    转载 http://blog.csdn.net/zhangzhaokun/article/details/4750021 最近学习了如何使用apache cxf和Spring发布webservice, ...

  5. pb的webserver增加的方法发布后没有显示_Egret 5.3 正式发布,为重度小游戏开发带来新技能...

    各位开发者好,白鹭引擎团队今天发布2020年最大的一次更新:Egret5.3版本.由于白鹭引擎团队在2019年已经针对部分开发者提供过内部的5.3.x 版本,所以本次更新的版本号为 5.3.5. 根据 ...

  6. 安全预警:独立发布的Oracle严重 CVE-2018-3110 公告

    在 2018年8月10日,Oracle 独立的发送了一封"安全警告"邮件给所有的 Oracle 用户,这封邮件的标题是:Oracle Security Alert for CVE- ...

  7. Hinton独立发布44页论文火爆社区,没有实验:给你们个idea,自己去试吧

    机器之心 来源:机器之心编辑部 深度学习推动了 AI 领域成为目前最热门的学科,但引领这一风潮的先驱者,如 Geoffrey Hinton,正期待对神经网络进行大刀阔斧的修改,让 AI 能力实现新的真 ...

  8. Hinton独立发布44页论文火爆社区!没有实验:给你们个idea,自己去试吧

    点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:机器之心 深度学习推动了 AI 领域成为目前最热门的学科,但引领这一风潮的先驱者, ...

  9. 华为mate 30rs保时捷安装鸿蒙系统,华为Mate30 RS保时捷版本发布:加入高档机身工艺,标配5G功能...

    每年的华为Mate系列旗舰手机都会有一款保时捷定制版,今年的Mate30也不例外. 就在9月19日晚,华为Mate30系列正式在德国慕尼黑发布,现场不仅展示了这款华为Mate30系列手机的精美外形,与 ...

最新文章

  1. 基于数组实现循环队列(基于Java实现)
  2. Mongoose源码剖析:Introduction and Installation
  3. c语言用正数的形式求最大值最小值,C语言-进制 - 盘盘的灰灰的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. GIS空间数据结构 - 矢量和栅格
  5. 使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务
  6. 【英语学习】【Level 07】U04 Rest and Relaxation L2 A rest stop with everything
  7. android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
  8. cratedb导入json文件
  9. 工作的时候用到spring返回xml view查到此文章亲测可用
  10. centos6.3安装Samba及权限
  11. python自动化办公要学多久-深圳用python进行办公自动化都需要学习什么知识呢,谁来说下...
  12. 【个人笔记 - 目录】OpenCV4 C++ 快速入门 30讲
  13. 2048小程序代码c语言,微信小程序版2048
  14. ACM算法分类及完成情况
  15. css城市列表,js 获取全国城市列表方法
  16. 营销工具-优惠券相关设计思路
  17. FT232RL FTDI USB转串口芯片SSOP28 国产替代
  18. php 繁体自动转简体,php 繁体字转化为简体字
  19. [听风]TBC炼金速冲1-375
  20. 【转】 笔记本散热维护

热门文章

  1. 带界面的OCX制作实例
  2. Linux下使用od查看文件
  3. VC6编译卡死之解决办法
  4. linux字符设备驱动之字符之异步通知
  5. React开发(203):react代码分割之React.lazy
  6. 前端学习(3272):js中this的使用箭头函数
  7. javascript学习系列(7):数组中的concat方法
  8. [html] 你认为Html的术难点在哪?
  9. [html] HTML5的文件离线储存怎么使用,工作原理是什么?
  10. [css] 为什么说不提倡用1px的小尺寸图片做背景平铺?