栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring整合ApacheCXF实现基于Restful风格的WebService(基于jaxrs)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring整合ApacheCXF实现基于Restful风格的WebService(基于jaxrs)

1.服务端 1.1 创建web maven项目

1.2 添加依赖pom.xml

	4.0.0
	org.example
	spring_jaxrs_server
	war
	0.0.1-SNAPSHOT
	spring_jaxrs_server Maven Webapp
	http://maven.apache.org
	
		
		
			org.apache.cxf
			cxf-rt-frontend-jaxrs
			3.0.1
		
		
		
			org.slf4j
			slf4j-log4j12
			1.7.12
			test
		
		
		
			org.apache.cxf
			cxf-rt-rs-client
			3.0.1
		
		
		
			org.apache.cxf
			cxf-rt-rs-extension-providers
			3.0.1
		
		
		
			org.codehaus.jettison
			jettison
			1.3.7
		
		
		
			org.springframework
			spring-context
			4.2.4.RELEASE
		
		
		
			org.springframework
			spring-web
			4.2.4.RELEASE
		
		
		
			junit
			junit
			4.12
			test
		

	
	
		
			
				
				
					org.apache.maven.plugins
					maven-compiler-plugin
					3.2
					
						1.8
						1.8
						true
					
				
				
				
					org.apache.tomcat.maven
					tomcat7-maven-plugin
					2.2
					
						
						8080
						
						/
					
				
			
		
	


1.3 web.xml



	Archetype Created Web Application

	
	
		cxfServlet
		org.apache.cxf.transport.servlet.CXFServlet
	
	
		cxfServlet
		
		/ws
@XmlRootElement(name = "User")
public class User {
	
	private Integer id;
	private String username;
	private String city;
	
	private List cars = new ArrayList();

	
	public User() {
		super();
	}

	public User(Integer id, String username, String city, List cars) {
		super();
		this.id = id;
		this.username = username;
		this.city = city;
		this.cars = cars;
	}

	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 getCars() {
		return cars;
	}

	public void setCars(List cars) {
		this.cars = cars;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
	}
	
}

1.5 服务接口、实现
package org.jaxrs.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 org.jaxrs.entity.User;


//@Path 在接口上表示访问当前服务接口对应的路径
//@Produces 值为**")
public interface UserServiceI {
	
	
	@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 findAllUsers();
	
	@GET
	@Path("/user/{id}")
	@Consumes("application/xml")
	@Produces({"application/xml","application/json"})
	public User findUserById(@PathParam("id") Integer id);
	
	@DELETE
	@Path("/user/{id}")
	@Consumes({"application/xml","application/json"})
	public void deleteUser(@PathParam("id") Integer id);

}

package org.jaxrs.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.jaxrs.entity.Car;
import org.jaxrs.entity.User;
import org.jaxrs.service.UserServiceI;


public class UserServiceImpl implements UserServiceI{

	@Override
	public void saveUser(User user) {
		System.out.println("save user:" + user);
	}

	@Override
	public void updateUser(User user) {
		System.out.println("update user:"+user);
	}

	@Override
	public List findAllUsers() {
		//张三所拥有的汽车集合
		List cars = new ArrayList();
		Car car1 = new Car(101,"保时捷",1000000000000d);
		Car car2 = new Car(102,"宝马",4000000d);
		cars.add(car1);
		cars.add(car2);
		
		List users =new ArrayList();
		User user1 = new User(1,"张三","东莞",cars);
		
		User user2 = new User(2,"李四","上海",null);
		
		users.add(user1);
		users.add(user2);
		return users;
	}

	@Override
	public User findUserById(Integer id) {
		if (id == 1) {
			User user = new User(1,"张三","东莞",null);
			return user;
		}
		return null;
	}

	@Override
	public void deleteUser(Integer id) {
		System.out.println("delete user id:"+id);
	}

}

1.6 Spring整合CXF配置applicationContext.xml


        
        
        
         
         
         	
         		
         	
         




1.7 发布服务

这里一定要设置jdk版本,因为pom.xml设置了maven编译版本为1.8,如果不是jdk1.8,会报错不匹配

控制台没有报错即发布成功

2.客户端 2.1 创建简单maven项目

2.2 添加依赖pom.xml

  4.0.0
  org.example
  spring_jaxrs_client
  0.0.1-SNAPSHOT
  
  
		
		
			org.apache.cxf
			cxf-rt-frontend-jaxrs
			3.0.1
		
		
		
			org.slf4j
			slf4j-log4j12
			1.7.12
			test
		
		
		
			org.apache.cxf
			cxf-rt-rs-client
			3.0.1
		
		
		
			org.apache.cxf
			cxf-rt-rs-extension-providers
			3.0.1
		
		
		
			org.codehaus.jettison
			jettison
			1.3.7
		
		
		
			org.springframework
			spring-context
			4.2.4.RELEASE
		
		
		
			org.springframework
			spring-web
			4.2.4.RELEASE
		
		
		
			junit
			junit
			4.12
			test
		

	
	
		
			
				
				
					org.apache.maven.plugins
					maven-compiler-plugin
					3.2
					
						1.8
						1.8
						true
					
				
				
				
					org.apache.tomcat.maven
					tomcat7-maven-plugin
					2.2
					
						
						8080
						
						/
					
				
			
		
	

2.3 实体类
package org.jaxrs.entity;

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 + "]";
	}
	public Car(Integer id, String carName, Double price) {
		super();
		this.id = id;
		this.carName = carName;
		this.price = price;
	}
	public Car() {
		super();
	}
	
}

package org.jaxrs.entity;

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 cars = new ArrayList();

	
	public User() {
		super();
	}

	public User(Integer id, String username, String city, List cars) {
		super();
		this.id = id;
		this.username = username;
		this.city = city;
		this.cars = cars;
	}

	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 getCars() {
		return cars;
	}

	public void setCars(List cars) {
		this.cars = cars;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
	}
	
}

2.4 测试不返回
package org.jaxrs.test;

import java.util.List;

import javax.ws.rs.core.MediaType;

import org.apache.cxf.jaxrs.client.WebClient;
import org.jaxrs.entity.User;
import org.junit.Test;


public class Client {

	@Test
	public void testSave() {
		User user = new User(100, "王五", "横沥", null);

		// 通过WebClient对象远程调用服务端
		WebClient.create("http://localhost:8080/ws/userService/userService/user").type(MediaType.APPLICATION_JSON) // 默认请求的数据格式为xml,指定请求的数据格式为json
				.post(user);
	}

2.4.1 控制台打印

客户端

log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

服务端

save user:User [id=100, username=王五, city=横沥, cars=[]]

2.5 测试返回单对象
	@Test
	public void testGet() {
		// 通过WebClient对象远程调用服务端
		User user = WebClient.create("http://localhost:8080/ws/userService/userService/user/1")
				.accept(MediaType.APPLICATION_JSON) // 默认响应的数据格式为xml,指定响应的数据格式为json
				.get(User.class);// get(class)返回类型
		System.out.println(user);
	}
2.5.1 控制台打印

客户端

服务端

2.6 测试返回集合对象
	@Test
	public void testGetAll() {
		// 通过WebClient对象远程调用服务端
		List user = (List) WebClient.create("http://localhost:8080/ws/userService/userService/user")
				.accept(MediaType.APPLICATION_JSON) // 默认响应的数据格式为xml,指定响应的数据格式为json
				.getCollection(User.class);// get(class)返回类型
		System.out.println(user);
	}
2.6.1 控制台打印

客户端

服务端

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号