WebService 之CXF(rs)之HelloWorld
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的更多相关文章
- CXF学习(2) helloworld
		0.新建一个项目取名wsserver. pom.xml 文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ... 
- WebService之CXF注解报错(一)
		WebService之CXF注解 1.详细报错例如以下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] ... 
- WebService它CXF注释错误(两)
		WebService它CXF注解 1.详细报错例如以下 五月 04, 2014 11:24:12 下午 org.apache.cxf.wsdl.service.factory.ReflectionSe ... 
- WebService之CXF注解报错(三)
		WebService之CXF注解 1.具体错误如下 五月 04, 2014 11:29:28 下午 org.apache.cxf.wsdl.service.factory.ReflectionServ ... 
- WebService之CXF注解报错(二)
		WebService之CXF注解 1.具体报错如下 五月 04, 2014 11:24:12 下午 org.apache.cxf.wsdl.service.factory.ReflectionServ ... 
- 转载 WebService 的CXF框架 WS方式Spring开发
		WebService 的CXF框架 WS方式Spring开发 1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ... 
- 【WebService】WebService之CXF和Spring整合(六)
		前面介绍了WebService与CXF的使用,项目中我们经常用到Spring,这里介绍CXF与Spring整合 步骤 1.创建一个Maven Web项目,可以参照:[Maven]Eclipse 使用M ... 
- 转-JAVA webservice之CXF 范例--http://cxshun.iteye.com/blog/1275408
		JAVA webservice之CXF 博客分类: j2ee相关 昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢.因为CXF是在xfire的基础上实现 的,所以我 ... 
- Webservice与CXF框架快速入门
		1. Webservice Webservice是一套远程调用技术规范 远程调用RPC, 实现了系统与系统进程间的远程通信.java领域有很多可实现远程通讯的技术,如:RMI(Socket + 序列化 ... 
随机推荐
- 抽象工厂方法模式(Abstract Factory Pattern)
			Provide an interface for creating families of related or dependent objects without specifying their ... 
- Murano Weekly Meeting 2016.08.23
			Meeting time: 2016.August.23 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: ... 
- (转)开发监控Linux 内存 Shell 脚本
			原文:http://blog.csdn.net/timchen525/article/details/76474017 题场景: 开发Shell 脚本判断系统剩余内存的大小,如果低于100MB,就邮件 ... 
- storm中KafkaSpout的选择
			Storm最常用的消息源就是Kafka,在对接的时候大多需要使用KafkaSpout: 在网上大概有两种KafkaSpout,一种是只有几十行,一种却有一大啪啦类文件. 在kafka中,同一个part ... 
- opensuse12.3 桌面设置备忘录
			工作空间外观 窗口装饰 ghost deco2.2 光标主题 ringG 桌面主题 ghost 欢迎屏幕 login-scan-splash-cg 应用程序外观 风格 部件样式 Oxygen 颜色 g ... 
- 九度oj题目1027:欧拉回路
			题目1027:欧拉回路 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2844 解决:1432 题目描述: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条 ... 
- C#-01.语法基础
			a. 语法基础 i. 命名空间(namespace):是 C# 中组织代码的方式,用来声明命名空间 . 语法:namespace 命名空间名称{ //命名空间的声明 } . 作用:可以把紧密相关的一些 ... 
- git获取别人远程dev分支上的代码
			我们在使用 git clone xxx.git 下载代码的时候,获取到的只是 master上的代码 假入有个 dev 分支我们想获取上面的代码怎么办! #下载dev分支上的代码并切换到dev分支 g ... 
- Sql server 操作笔记
			(1)更改字段类型 (2)添加字段 alter table class add InKinDate intEXECUTE sp_addextendedproperty N'MS_Description ... 
- shell 复制/备份文件 脚本
			#!/bin/sh # author hapday # -- echo "以时间日期为名称基准备份 war 包." date +%Y-%m-%d-%H-%M-%S cp artup ... 
