lfjigu 发表于 2017-1-9 08:58:12

Apache CXF实战之四:构建RESTful Web Service

这篇文章介绍一下怎么通过CXF来发布RESTful的Web Service.
1. 首先是实体类,注意其中的@XmlRootElement注解

[*]package com.googlecode.garbagecan.cxfstudy.jaxrs;  
[*] 
[*]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 com.googlecode.garbagecan.cxfstudy.jaxrs;  
[*] 
[*]import javax.ws.rs.GET;  
[*]import javax.ws.rs.Path;  
[*]import javax.ws.rs.PathParam;  
[*]import javax.ws.rs.Produces;  
[*]import javax.ws.rs.QueryParam;  
[*] 
[*]@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 com.googlecode.garbagecan.cxfstudy.jaxrs;  
[*] 
[*]import java.util.Calendar;  
[*] 
[*]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 com.googlecode.garbagecan.cxfstudy.jaxrs;  
[*] 
[*]import org.apache.cxf.interceptor.LoggingInInterceptor;  
[*]import org.apache.cxf.interceptor.LoggingOutInterceptor;  
[*]import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;  
[*] 
[*]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 com.googlecode.garbagecan.cxfstudy.jaxrs;  
[*] 
[*]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。
页: [1]
查看完整版本: Apache CXF实战之四:构建RESTful Web Service