|
Page Edited :
CXF20DOC :
JAX-RS (JSR-311)
JAX-RS (JSR-311) has been edited by Jervis Liu (Dec 20, 2007). Content:CXF has an initial implementation of JAX-RS (JSR-311): Java API for RESTfulWeb Services. JAX-RS provides a more standard way to build RESTful services in Java. A demo called restful_jaxrs can be found in CXF distribution (CXF 2.1 only). Understanding the basicsResource classA resource class is a Java Class annotated with JAX-RS annotations to represent a Web resource. A typical resource class in JAX-RS looks like below: package demo.jaxrs.server;import java.util.HashMap; import java.util.Map; import javax.ws.rs.HttpMethod; import javax.ws.rs.ProduceMime; import javax.ws.rs.UriParam; import javax.ws.rs.UriTemplate; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @UriTemplate("/customerservice/") public class CustomerService { public CustomerService() { } @HttpMethod("GET") @UriTemplate("/customers/{id}/") public Customer getCustomer(@UriParam("id") String id) { ...... } @HttpMethod("PUT") @UriTemplate("/customers/") public Response updateCustomer(Customer customer) { ...... } @HttpMethod("POST") @UriTemplate("/customers/") public Response addCustomer(Customer customer) { ...... } @HttpMethod("DELETE") @UriTemplate("/customers/{id}/") public Response deleteCustomer(@UriParam("id") String id) { ...... } @UriTemplate("/orders/{orderId}/") public Order getOrder(@UriParam("orderId") String orderId) { ...... } } URI Templates@UriTemplate annotation can be applied to resource classes or methods. JAX-RS spec @HttpMethod@HttpMethod specifies the HTTP verb (GET, PUT, POST,DELETE) a method can handle. Sub-resource locators.A method of a resource class that is annotated with @UriTemplate becomes a sub-resource locator when @HttpMethod is not present. Sub-resource locators are used to further resolve the object that will handle the request. In the example below, getOrder method is a sub-resource locator: @UriTemplate("/customerservice/") public class CustomerService { @UriTemplate("/orders/{orderId}/") public Order getOrder(@UriParam("orderId") String orderId) { ...... } } @XmlRootElement(name = "Order") public class Order { private long id; private String description; public Order() { } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String d) { this.description = d; } @HttpMethod("GET") @UriTemplate("products/{productId}/") public Product getProduct(@UriParam("productId")int productId) { ...... } } A HTTP GET request to http://localhost:9000/customerservice/orders/223/products/323 Content types.More information on how to use JAX-RS annotations to create a resource class can be found from JAX-RS spec Configuring JAX-RS servicesConfiguring JAX-RS services programmaticallyYou can create a JAX-RS RESTful service by using JAXRSServerFactoryBean: JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(CustomerService.class); sf.setAddress("http://localhost:9000/"); sf.create(); A couple things to note:
Configuring JAX-RS services in container with Spring configuration file.web.xml<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXF Servlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> beans.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxrs:server id="customerService" address="/"> <jaxrs:serviceBeans> <bean class="demo.jaxrs.server.CustomerService" /> </jaxrs:serviceBeans> </jaxrs:server> </beans> |
Unsubscribe or edit your notifications preferences
