Spring整合CXF,发布RSETful 风格WebService--编写客户端代码,调用RESTful WebService
package com.hoo.client;
import java.io.IOException;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hoo.entity.MapBean;
import com.hoo.entity.User;
import com.hoo.entity.Users;
import com.hoo.service.RESTSample;
/**
* <b>function:</b> RESTful风格WebService
* @author hoojo
* @createDate 2012-7-20 下午03:31:03
* @file RSETServiceClient.java
* @package com.hoo.client
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class RSETServiceClient {
private static WebClient client;
@Before
public void init() {
// 手动创建webClient对象,注意这里的地址是发布的那个/rest地址
//String url = "http://localhost:8000/CXFWebService/rest/";
//client = WebClient.create(url);
// 从Spring Ioc容器中拿webClient对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
client = ctx.getBean("webClient", WebClient.class);
}
@After
public void destory(){
}
@Test
public void testGet() {
System.out.println(client.path("sample").accept(MediaType.TEXT_PLAIN).get(String.class));
}
@Test
public void testRequest() {
System.out.println(client.path("sample/request/234234").accept(MediaType.TEXT_PLAIN).get(String.class));
}
@Test
public void testBean() {
User user = client.path("sample/bean/{id}", 25).accept(MediaType.APPLICATION_XML).get(User.class);
System.out.println(user);
}
@Test
public void testList() {
System.out.println(client.path("sample/list").accept(MediaType.APPLICATION_XML).get(Users.class).getUsers());
}
@Test
public void testMap() {
System.out.println(client.path("sample/map").accept(MediaType.APPLICATION_XML).get(MapBean.class).getMap());
}
@Test
public void testDeleteData() {
client.path("sample/removeData/23").delete();
}
@Test
public void testPostData() {
User user = new User();
user.setId(21432134);
user.setAddress("hoojo#gz");
user.setEmail("hoojo_@126.com");
user.setName("hoojo");
System.out.println(client.path("sample/postData").accept(MediaType.APPLICATION_XML).post(user, User.class));
}
@Test
public void testPutData() {
User user = new User();
user.setId(21432134);
System.out.println(client.path("sample/putData/1").accept(MediaType.APPLICATION_XML).put(user).getEntity());
}
}如果你喜欢用Spring的方式,还需要在applicationContext-client.xml中增加如下配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<bean id="webClient" class="org.apache.cxf.jaxrs.client.WebClient" factory-method="create">
<constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />
</bean>
</beans>
这种是利用WebClient对象来调用WebService,还有一种方法也可以调用WebService,代码如下:
// 手动创建
//RESTSample sample = JAXRSClientFactory.create("http://localhost:8000/CXFWebService/rest", RESTSample.class);
// 从Spring Ioc容器中拿webClient对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
RESTSample sample = ctx.getBean("restSampleBean", RESTSample.class);
System.out.println(sample);
System.out.println(sample.doGet());
//System.out.println(sample.doRequest("haha", null, null));
System.out.println(sample.getBean(22));
System.out.println(sample.getList());
System.out.println(sample.getMap().getMap());
User user = new User();
user.setId(21432134);
user.setAddress("hoojo#gz");
user.setEmail("hoojo_@126.com");
user.setName("hoojo");
System.out.println(sample.postData(user));
System.out.println(sample.putData(111, user));
sample.deleteData(2);
这种方式相对比WebClient要简单,直接使用接口中的方法即可。同样如果你要整合到Spring可以在applicationContext-client.xml中增加配置如下:
<bean id="restSampleBean" class="org.apache.cxf.jaxrs.client.JAXRSClientFactory" factory-method="create">
<constructor-arg type="java.lang.String" value="http://localhost:8000/CXFWebService/rest/" />
<constructor-arg type="java.lang.Class" value="com.hoo.service.RESTSample" />
</bean>
执行以上方法可以看到控制台打印结果如下:
client console
org.apache.cxf.jaxrs.client.ClientProxyImpl@1cf7491
this is get rest request
22#JojO#null#null
com.hoo.entity.Users@16eb6bc
{key-0=0#JojO-0#null#null, key-1=1#JojO-1#null#null, key-2=2#JojO-2#null#null, key-3=3#JojO-3#null#null}
21432134#jojo##12321321#hoojo_@126.com#hoojo#gz
111#hoojo#hoojo_@126.com#hoojo#gz
server console
####getBean#####
id:22
Method:GET
uri:sample/bean/22
{id=[22]}
####getList#####
Method:GET
uri:sample/list
{}
####getMap#####
Method:GET
uri:sample/map
{}
21432134#hoojo#hoojo_@126.com#hoojo#gz
#####putData#####
21432134#hoojo#hoojo_@126.com#hoojo#gz
111#hoojo#hoojo_@126.com#hoojo#gz
#######deleteData#######2
就这样,整合restful WebService成功。
更多关系Spring的信息
Spring 论坛 http://www.itchm.com/forum-59-1.html