Apache CXF实战之四 构建RESTful Web Service

文章摘抄至 http://blog.csdn.net/kongxx/article/details/7527115

1. 首先是实体类,注意其中的@XmlRootElement注解

package restful.model;

import java.util.Date;  

import javax.xml.bind.annotation.XmlRootElement;  
  
@XmlRootElement(name="Customer")   
public class Customer {  
    private String id;  
    private String name;  
    private Date birthday;  
    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Date getBirthday() {  
        return birthday;  
    }  
    public void setBirthday(Date birthday) {  
        this.birthday = birthday;  
    }  
    @Override  
    public String toString() {  
        return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this);  
    }  
}  

2. RESTful Web Service接口类,可以通过修改@Produces注解来声明暴露接口返回的json还是xml数据格式

package restful.service;


import javax.ws.rs.GET; 
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; 

import restful.model.Customer;
  
@Path(value = "/customer")   
//@Produces("*/*")  
@Produces("application/xml")  
//@Produces("application/json")  
public interface CustomerService {  
	@GET  
    @Path(value = "/{id}/info")  
    Customer findCustomerById(@PathParam("id")String id);  
      
    @GET  
    @Path(value = "/search")  
    Customer findCustomerByName(@QueryParam("name")String name);  
}  

3. RESTful Web Service接口实现类

package restful.service;

import java.util.Calendar;  

import javax.ws.rs.core.MediaType;

import restful.model.Customer;

public class CustomerServiceImpl implements CustomerService {  
  
    public Customer findCustomerById(String id) { 
        Customer customer = new Customer();  
        customer.setId(id);  
        customer.setName(id);  
        customer.setBirthday(Calendar.getInstance().getTime());  
        return customer;  
    }  
      
    public Customer findCustomerByName(String name) {  
        Customer customer = new Customer();  
        customer.setId(name);  
        customer.setName(name);  
        customer.setBirthday(Calendar.getInstance().getTime());  
        return customer;  
    }  
}  

4. Server端代码

package restful.deploy;

import org.apache.cxf.interceptor.LoggingInInterceptor;  
import org.apache.cxf.interceptor.LoggingOutInterceptor;  
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;  

import restful.service.CustomerServiceImpl;
  
public class MyServer {  
    public static void main(String[] args) throws Exception {  
        JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();  
//        factoryBean.getInInterceptors().add(new LoggingInInterceptor());  
//        factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());  
        factoryBean.setResourceClasses(CustomerServiceImpl.class);  
        factoryBean.setAddress("http://localhost:9000/ws/jaxrs");  
        factoryBean.create();  
    }  
}  

5. Client端代码

package restful.client;

import org.apache.commons.httpclient.HttpClient;  
import org.apache.commons.httpclient.HttpStatus;  
import org.apache.commons.httpclient.methods.GetMethod;  
  
public class MyClient {  
  
    public static void main(String[] args) throws Exception {  
        go("http://localhost:9000/ws/jaxrs/customer/1/info");  
        go("http://localhost:9000/ws/jaxrs/customer/search?name=abc");  
    }  
      
    private static void go(String url) throws Exception {  
        HttpClient client = new HttpClient();  
        GetMethod method = new GetMethod(url);  
        int statusCode = client.executeMethod(method);  
        if (statusCode != HttpStatus.SC_OK) {  
            System.err.println("Method failed: " + method.getStatusLine());  
        }  
        byte[] responseBody = method.getResponseBody();  
        System.out.println(new String(responseBody));  
    }  
}  

6.测试

首先运行MyServer类,然后运行MyClient类来验证Web Service。

猜你喜欢

转载自hbiao68.iteye.com/blog/2044259