1.建立mavenjava项目

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast.maven</groupId>
<artifactId>cxf_rs_HelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cxf_rs_HelloWorld</name> <dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.1</version>
</dependency> <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency> <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.1</version>
</dependency> <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency> <dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
</project>

pom.xml

 ### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=info, stdout

log4j-properties

2.创建实体类和服务接口

 package cn.itcast.cxf.domain;

 import javax.xml.bind.annotation.XmlRootElement;

 @XmlRootElement(name = "Car")
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;
} @Override
public String toString() {
return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";
} }

Car

 package cn.itcast.cxf.domain;

 import java.util.ArrayList;
import java.util.List; import javax.xml.bind.annotation.XmlRootElement;
//指定序列化(转换xml或json)对象的名字
@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;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
} }

User

 package cn.itcast.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.itcast.cxf.domain.User; @Path("/userService")//服务访问资源路径
@Produces("*/*")生成(返回值)可以不写
public interface IUserService { @POST
@Path("/user")///userService/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")
public User finUserById(@PathParam("id") Integer id); @DELETE
@Path("/user/{id}")
@Consumes("application/xml")
public void deleteUser(@PathParam("id") Integer id);
}

IUservice

 package cn.itcast.cxf.service;

 import java.util.ArrayList;
import java.util.List; import cn.itcast.cxf.domain.Car;
import cn.itcast.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);
} }

UserviceImpl

@GET 查询 @PUT 修改 @POST 增加 @DELETE 删除

3.发布服务

 package cn.itcast.cxf.rs.server;

 import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import cn.itcast.cxf.domain.Car;
import cn.itcast.cxf.domain.User;
import cn.itcast.cxf.service.IUserService;
import cn.itcast.cxf.service.UserServiceImpl; public class RS_Server {
public static void main(String[] args) {
IUserService userService = new UserServiceImpl(); JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean();
restServer.setResourceClasses(User.class, Car.class);
restServer.setServiceBean(userService);
restServer.setAddress("http://localhost:9999/"); // 打印日志
restServer.getInInterceptors().add(new LoggingInInterceptor());
restServer.getOutInterceptors().add(new LoggingOutInterceptor()); restServer.create();
}
}

Server

4.客户端程序的编写Webclient工具类使用

 package cn.itcast.cxf.rs.client;

 import java.util.Collection;

 import javax.ws.rs.core.MediaType;

 import org.apache.cxf.jaxrs.client.WebClient;

 import cn.itcast.cxf.domain.User;

 public class RS_Client {
public static void main(String[] args) {
User user = new User();
user.setId(3);
user.setUsername("小美");
user.setCity("深圳"); // 根据id查询
WebClient client = WebClient.create("http://localhost:9999/");
User responseUser = client.path("userService/user/1").accept(MediaType.APPLICATION_XML).get(User.class);
System.out.println(responseUser); // 增加
WebClient.create("http://localhost:9999/").path("userService/user").accept(MediaType.APPLICATION_XML)
.post(user); // 修改
WebClient.create("http://localhost:9999/").path("userService/user").type(MediaType.APPLICATION_JSON).put(user); // 删除
WebClient.create("http://localhost:9999/").path("userService/user/1").accept(MediaType.APPLICATION_XML)
.delete(); // 查询所有用户
Collection<? extends User> users = WebClient.create("http://localhost:9999/").path("userService/user")
.accept(MediaType.APPLICATION_JSON).getCollection(User.class);
System.out.println(users);
}
}

Client

WebService 之CXF(rs)之HelloWorld的更多相关文章

  1. CXF学习(2) helloworld

    0.新建一个项目取名wsserver. pom.xml 文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  2. WebService之CXF注解报错(一)

    WebService之CXF注解 1.详细报错例如以下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] ...

  3. WebService它CXF注释错误(两)

    WebService它CXF注解 1.详细报错例如以下 五月 04, 2014 11:24:12 下午 org.apache.cxf.wsdl.service.factory.ReflectionSe ...

  4. WebService之CXF注解报错(三)

    WebService之CXF注解 1.具体错误如下 五月 04, 2014 11:29:28 下午 org.apache.cxf.wsdl.service.factory.ReflectionServ ...

  5. WebService之CXF注解报错(二)

    WebService之CXF注解 1.具体报错如下 五月 04, 2014 11:24:12 下午 org.apache.cxf.wsdl.service.factory.ReflectionServ ...

  6. 转载 WebService 的CXF框架 WS方式Spring开发

    WebService 的CXF框架 WS方式Spring开发   1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...

  7. 【WebService】WebService之CXF和Spring整合(六)

    前面介绍了WebService与CXF的使用,项目中我们经常用到Spring,这里介绍CXF与Spring整合 步骤 1.创建一个Maven Web项目,可以参照:[Maven]Eclipse 使用M ...

  8. 转-JAVA webservice之CXF 范例--http://cxshun.iteye.com/blog/1275408

    JAVA webservice之CXF 博客分类: j2ee相关 昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢.因为CXF是在xfire的基础上实现 的,所以我 ...

  9. Webservice与CXF框架快速入门

    1. Webservice Webservice是一套远程调用技术规范 远程调用RPC, 实现了系统与系统进程间的远程通信.java领域有很多可实现远程通讯的技术,如:RMI(Socket + 序列化 ...

随机推荐

  1. 将libFM模型变换成tensorflow可serving的形式

    fm_model是libFM生成的模型 model.ckpt是可以tensorflow serving的模型结构 亲测输出正确. 代码: import tensorflow as tf # libFM ...

  2. linux 运维基础测验题

    第一题:创建一个目录/data --> mkdir /data eg: ls  -d 显示命令    -l 详细信息    -a 显示所有文件 cd 打开目录 pwd 显示当前目录 第二题:在/ ...

  3. TOJ 3248 Flip Game

    Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of i ...

  4. 在nginx上部署django项目--------Gunicorn+Django+nginx+mysql

    一.安装nginx 以前的博客我有写,这里就不写了 http://www.cnblogs.com/wt11/p/6420442.html 二.安装mysql 我用的mysql5.7  64位的二进制包 ...

  5. Bitmap图片查看器

    在Android 应用中使用assets目录下存放的资源文件,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序通过AssetManager以二 进制流的形式来读取资源.此应用是查看 ...

  6. Dictionary集合 字典

    1 Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(,"张三"); ...

  7. Thrift笔记(三)--Thrift框架通信源码分析

    Thrift 客户端调用RPC的Demo public static void main(String[] args) throws Exception { TTransport transport ...

  8. tomcat server 报错之 More than the maximum allowed number of cookies

    More than the maximum allowed number of cookies EVERE: Error processing request java.lang.IllegalArg ...

  9. 【Spring Cloud】与Spring Boot版本匹配关系

    Spring Cloud版本演进情况如下: 版本名称 版本Finchley snapshot版Edgware snapshot版Dalston SR1 当前最新稳定版本Camden SR7 稳定版本B ...

  10. Python爬虫《Python网络爬虫相关基础概念》

    引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的应用还是从 ...