简单使用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. python基础知识-11-函数装饰器
  2. 安卓自定义View进阶-Matrix Camera
  3. ad策略下发_组策略--下发文件到计算机
  4. EveryNote使用说明,好用的文件备注搜索工具
  5. 说一说ffmpeg到处都在使用的ff_thread_once函数
  6. 两台服务器实现会话共享
  7. JBoss BRMS复杂事件处理(CEP)性能基准
  8. 高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)
  9. python selenium-9 grid模式
  10. unity shader base pass and additional pass
  11. 快速上手OSS图片视频上传
  12. JavaScript-时区
  13. java实现正态分布累积分布,标准正态分布变量的累积概率分布函数
  14. 网口压线顺序_网线水晶头接法口诀顺序及接法详细步骤
  15. 制作一款app系统软件大概需要多少钱
  16. 二维导热问题的ADI-TDMA算法
  17. vconsole 轻松实现移动端调试
  18. Python:实现ternary search三元搜索算法(附完整源码)
  19. 3.抽象类:什么是抽象类???抽象类的特点有哪些???
  20. XDOJ 235-月份判断

热门文章

  1. VC程序员常用工具篇
  2. Mac下安装event库
  3. mac下安装nginx和php
  4. 带界面的OCX制作实例
  5. C++真的能够王者归来吗?
  6. python对时间日期做格式化
  7. 微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败
  8. NUC972配置为支持NFS
  9. [react] 说说你是怎么理解react的业务组件和技术组件的?
  10. 前端小知识点(4):JS 运行机制和存储