1.建立mavenjava项目
1 <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">
2 <modelVersion>4.0.0</modelVersion>
3 <groupId>cn.itcast.maven</groupId>
4 <artifactId>cxf_rs_HelloWorld</artifactId>
5 <version>0.0.1-SNAPSHOT</version>
6 <name>cxf_rs_HelloWorld</name>
7
8 <dependencies>
9 <dependency>
10 <groupId>org.apache.cxf</groupId>
11 <artifactId>cxf-rt-frontend-jaxrs</artifactId>
12 <version>3.0.1</version>
13 </dependency>
14
15 <dependency>
16 <groupId>org.apache.cxf</groupId>
17 <artifactId>cxf-rt-transports-http-jetty</artifactId>
18 <version>3.0.1</version>
19 </dependency>
20
21 <dependency>
22 <groupId>org.slf4j</groupId>
23 <artifactId>slf4j-log4j12</artifactId>
24 <version>1.7.12</version>
25 </dependency>
26
27 <dependency>
28 <groupId>org.apache.cxf</groupId>
29 <artifactId>cxf-rt-rs-client</artifactId>
30 <version>3.0.1</version>
31 </dependency>
32
33 <dependency>
34 <groupId>org.apache.cxf</groupId>
35 <artifactId>cxf-rt-rs-extension-providers</artifactId>
36 <version>3.0.1</version>
37 </dependency>
38
39 <dependency>
40 <groupId>org.codehaus.jettison</groupId>
41 <artifactId>jettison</artifactId>
42 <version>1.3.7</version>
43 </dependency>
44 </dependencies>
45 </project>
1 ### direct log messages to stdout ###
2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
3 log4j.appender.stdout.Target=System.out
4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
6
7 ### direct messages to file mylog.log ###
8 log4j.appender.file=org.apache.log4j.FileAppender
9 log4j.appender.file.File=c:/mylog.log
10 log4j.appender.file.layout=org.apache.log4j.PatternLayout
11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
12
13 ### set log levels - for more verbose logging change 'info' to 'debug' ###
14
15 log4j.rootLogger=info, stdout
2.创建实体类和服务接口
1 package cn.itcast.cxf.domain;
2
3 import javax.xml.bind.annotation.XmlRootElement;
4
5 @XmlRootElement(name = "Car")
6 public class Car {
7 private Integer id;
8 private String carName;
9 private Double price;
10
11 public Integer getId() {
12 return id;
13 }
14
15 public void setId(Integer id) {
16 this.id = id;
17 }
18
19 public String getCarName() {
20 return carName;
21 }
22
23 public void setCarName(String carName) {
24 this.carName = carName;
25 }
26
27 public Double getPrice() {
28 return price;
29 }
30
31 public void setPrice(Double price) {
32 this.price = price;
33 }
34
35 @Override
36 public String toString() {
37 return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";
38 }
39
40 }
1 package cn.itcast.cxf.domain;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.xml.bind.annotation.XmlRootElement;
7 //指定序列化(转换xml或json)对象的名字
8 @XmlRootElement(name = "User")
9 public class User {
10 private Integer id;
11 private String username;
12 private String city;
13
14 private List<Car> cars = new ArrayList<Car>();
15
16 public Integer getId() {
17 return id;
18 }
19
20 public void setId(Integer id) {
21 this.id = id;
22 }
23
24 public String getUsername() {
25 return username;
26 }
27
28 public void setUsername(String username) {
29 this.username = username;
30 }
31
32 public String getCity() {
33 return city;
34 }
35
36 public void setCity(String city) {
37 this.city = city;
38 }
39
40 public List<Car> getCars() {
41 return cars;
42 }
43
44 public void setCars(List<Car> cars) {
45 this.cars = cars;
46 }
47
48 @Override
49 public String toString() {
50 return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
51 }
52
53 }
1 package cn.itcast.cxf.service;
2
3 import java.util.List;
4
5 import javax.ws.rs.Consumes;
6 import javax.ws.rs.DELETE;
7 import javax.ws.rs.GET;
8 import javax.ws.rs.POST;
9 import javax.ws.rs.PUT;
10 import javax.ws.rs.Path;
11 import javax.ws.rs.PathParam;
12 import javax.ws.rs.Produces;
13
14 import cn.itcast.cxf.domain.User;
15
16 @Path("/userService")//服务访问资源路径
17 @Produces("*/*")生成(返回值)可以不写
18 public interface IUserService {
19
20 @POST
21 @Path("/user")///userService/user
22 @Consumes({ "application/xml", "application/json" }) //消费(客户端传过来的数据,即接受的数据)
23 public void saveUser(User user);
24
25 @PUT
26 @Path("/user")
27 @Consumes({ "application/xml", "application/json" })
28 public void updateUser(User user);
29
30 @GET
31 @Path("/user")
32 @Produces({ "application/xml", "application/json" })//产生(返回到客户端的数据的格式)
33 public List<User> findAllUsers();
34
35 @GET
36 @Path("/user/{id}")
37 @Consumes("application/xml")
38 public User finUserById(@PathParam("id") Integer id);
39
40 @DELETE
41 @Path("/user/{id}")
42 @Consumes("application/xml")
43 public void deleteUser(@PathParam("id") Integer id);
44 }
1 package cn.itcast.cxf.service;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import cn.itcast.cxf.domain.Car;
7 import cn.itcast.cxf.domain.User;
8
9 public class UserServiceImpl implements IUserService {
10
11 public void saveUser(User user) {
12 System.out.println("save user:" + user);
13 }
14
15 public void updateUser(User user) {
16 System.out.println("update user:" + user);
17 }
18
19 public List<User> findAllUsers() {
20 List<User> users = new ArrayList<User>();
21 User user1 = new User();
22 user1.setId(1);
23 user1.setUsername("小明");
24 user1.setCity("北京");
25
26 List<Car> carList1 = new ArrayList<Car>();
27 Car car1 = new Car();
28 car1.setId(101);
29 car1.setCarName("保时捷");
30 car1.setPrice(1000000d);
31 carList1.add(car1);
32 Car car2 = new Car();
33 car2.setId(102);
34 car2.setCarName("宝马");
35 car2.setPrice(400000d);
36 carList1.add(car2);
37 user1.setCars(carList1);
38
39 users.add(user1);
40
41 User user2 = new User();
42 user2.setId(2);
43 user2.setUsername("小丽");
44 user2.setCity("上海");
45 users.add(user2);
46
47 return users;
48 }
49
50 public User finUserById(Integer id) {
51 if (id == 1) {
52 User user1 = new User();
53 user1.setId(1);
54 user1.setUsername("小明");
55 user1.setCity("北京");
56 return user1;
57 }
58 return null;
59 }
60
61 public void deleteUser(Integer id) {
62 System.out.println("delete user id :" + id);
63 }
64
65 }
@GET 查询 @PUT 修改 @POST 增加 @DELETE 删除
3.发布服务
1 package cn.itcast.cxf.rs.server;
2
3 import org.apache.cxf.interceptor.LoggingInInterceptor;
4 import org.apache.cxf.interceptor.LoggingOutInterceptor;
5 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
6
7 import cn.itcast.cxf.domain.Car;
8 import cn.itcast.cxf.domain.User;
9 import cn.itcast.cxf.service.IUserService;
10 import cn.itcast.cxf.service.UserServiceImpl;
11
12 public class RS_Server {
13 public static void main(String[] args) {
14 IUserService userService = new UserServiceImpl();
15
16 JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean();
17 restServer.setResourceClasses(User.class, Car.class);
18 restServer.setServiceBean(userService);
19 restServer.setAddress("http://localhost:9999/");
20
21 // 打印日志
22 restServer.getInInterceptors().add(new LoggingInInterceptor());
23 restServer.getOutInterceptors().add(new LoggingOutInterceptor());
24
25 restServer.create();
26 }
27 }
4.客户端程序的编写Webclient工具类使用
1 package cn.itcast.cxf.rs.client;
2
3 import java.util.Collection;
4
5 import javax.ws.rs.core.MediaType;
6
7 import org.apache.cxf.jaxrs.client.WebClient;
8
9 import cn.itcast.cxf.domain.User;
10
11 public class RS_Client {
12 public static void main(String[] args) {
13 User user = new User();
14 user.setId(3);
15 user.setUsername("小美");
16 user.setCity("深圳");
17
18 // 根据id查询
19 WebClient client = WebClient.create("http://localhost:9999/");
20 User responseUser = client.path("userService/user/1").accept(MediaType.APPLICATION_XML).get(User.class);
21 System.out.println(responseUser);
22
23 // 增加
24 WebClient.create("http://localhost:9999/").path("userService/user").accept(MediaType.APPLICATION_XML)
25 .post(user);
26
27 // 修改
28 WebClient.create("http://localhost:9999/").path("userService/user").type(MediaType.APPLICATION_JSON).put(user);
29
30 // 删除
31 WebClient.create("http://localhost:9999/").path("userService/user/1").accept(MediaType.APPLICATION_XML)
32 .delete();
33
34 // 查询所有用户
35 Collection<? extends User> users = WebClient.create("http://localhost:9999/").path("userService/user")
36 .accept(MediaType.APPLICATION_JSON).getCollection(User.class);
37 System.out.println(users);
38 }
39 }