You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/02/12 19:26:09 UTC
svn commit: r743825 [2/2] - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/form/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
rt/frontend/jaxrs/src/main...
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookNotFoundFault.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookNotFoundFault.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookNotFoundFault.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookNotFoundFault.java Thu Feb 12 18:26:07 2009
@@ -25,6 +25,10 @@
public class BookNotFoundFault extends Exception {
private BookNotFoundDetails details;
+ public BookNotFoundFault(String errorMessage) {
+ super(errorMessage);
+ }
+
public BookNotFoundFault(BookNotFoundDetails details) {
super();
this.details = details;
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreJaxrsJaxws.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreJaxrsJaxws.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreJaxrsJaxws.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreJaxrsJaxws.java Thu Feb 12 18:26:07 2009
@@ -22,6 +22,7 @@
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
+import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -30,16 +31,21 @@
@WebService
@Path("/bookstore")
+@Consumes("application/xml")
+@Produces("application/xml")
public interface BookStoreJaxrsJaxws {
@WebMethod
@GET
@Path("/{id}")
- Book getBook(@PathParam("id") @WebParam(name = "id") Long id);
+ Book getBook(@PathParam("id") @WebParam(name = "id") Long id) throws BookNotFoundFault;
@WebMethod
@POST
@Path("/books")
- @Produces("application/xml")
Book addBook(@WebParam(name = "book") Book book);
+
+ @Path("/books/{id}")
+ @WebMethod(exclude = true)
+ BookSubresource getBookSubresource(@PathParam("id") String id);
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSoapRestImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSoapRestImpl.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSoapRestImpl.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSoapRestImpl.java Thu Feb 12 18:26:07 2009
@@ -23,7 +23,10 @@
import java.util.Map;
import javax.annotation.Resource;
+import javax.jws.WebMethod;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
import javax.xml.ws.WebServiceContext;
import org.apache.cxf.jaxrs.ext.MessageContext;
@@ -42,6 +45,11 @@
}
public Book getBook(Long id) {
+ if (books.get(id) == null) {
+ Response r = Response.status(404).header("BOOK-HEADER",
+ "No Book with id " + id + " is available").build();
+ throw new WebApplicationException(r);
+ }
System.out.println(getContentType());
return books.get(id);
}
@@ -70,5 +78,10 @@
}
return request.getContentType();
}
+
+ @WebMethod(exclude = true)
+ public BookSubresource getBookSubresource(String id) {
+ return new BookSubresourceImpl(Long.valueOf(id));
+ }
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresource.java Thu Feb 12 18:26:07 2009
@@ -19,9 +19,16 @@
package org.apache.cxf.systest.jaxrs;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+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 org.apache.cxf.customer.book.BookNotFoundFault;
@@ -31,4 +38,22 @@
@Path("/subresource")
@Produces("application/xml")
Book getTheBook() throws BookNotFoundFault;
+
+ @POST
+ @Path("/subresource2/{n1}")
+ @Consumes("text/plain")
+ @Produces("application/xml")
+ Book getTheBook2(@PathParam("n1") String name1,
+ @QueryParam("n2") String name2,
+ @QueryParam("n3") String name3,
+ @HeaderParam("N4") String name4,
+ @CookieParam("n5") String name5,
+ String name6) throws BookNotFoundFault;
+
+ @POST
+ @Path("/subresource3")
+ Book getTheBook3(@FormParam("id") String id,
+ @FormParam("name") String name) throws BookNotFoundFault;
+
}
+
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookSubresourceImpl.java Thu Feb 12 18:26:07 2009
@@ -23,11 +23,43 @@
public class BookSubresourceImpl implements BookSubresource {
+ private Long id;
+
+ public BookSubresourceImpl() {
+ id = 123L;
+ }
+
+ public BookSubresourceImpl(Long id) {
+ this.id = id;
+ }
+
public Book getTheBook() throws BookNotFoundFault {
+
+ if (id == 0) {
+ return null;
+ }
+
Book b = new Book();
- b.setId(123);
+ b.setId(id);
b.setName("CXF in Action");
return b;
}
+ public Book getTheBook2(String n1, String n2, String n3, String n4, String n5, String n6)
+ throws BookNotFoundFault {
+
+ Book b = new Book();
+ b.setId(id);
+ b.setName(n1 + n2 + n3 + n4 + n5 + n6);
+ return b;
+ }
+
+ public Book getTheBook3(String sid, String name) throws BookNotFoundFault {
+ Book b = new Book();
+
+ b.setId(Long.valueOf(sid));
+ b.setName(name);
+ return b;
+ }
+
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Thu Feb 12 18:26:07 2009
@@ -23,7 +23,15 @@
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import org.apache.commons.httpclient.HttpClient;
@@ -32,7 +40,14 @@
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.ext.form.Form;
+import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+
import org.junit.BeforeClass;
import org.junit.Test;
@@ -63,6 +78,196 @@
}
@Test
+ public void testGetBook123Client() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+ Book b = proxy.getBook(new Long("123"));
+ assertEquals(123, b.getId());
+ assertEquals("CXF in Action", b.getName());
+ }
+
+ @Test
+ public void testGetBook123WebClient() throws Exception {
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ WebClient client = new WebClient(baseAddress);
+ client.path("/bookstore/123").accept(MediaType.APPLICATION_XML_TYPE);
+ Book b = client.get(Book.class);
+ assertEquals(123, b.getId());
+ assertEquals("CXF in Action", b.getName());
+ }
+
+ @Test
+ public void testNoBookWebClient() throws Exception {
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ WebClient client = new WebClient(baseAddress);
+ client.path("/bookstore/books/0/subresource").accept(MediaType.APPLICATION_XML_TYPE);
+ Book b = client.get(Book.class);
+ assertNull(b);
+ assertEquals(204, client.getResponse().getStatus());
+ }
+
+ @Test
+ public void testGetBook123WebClientResponse() throws Exception {
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ WebClient client = new WebClient(baseAddress);
+ client.path("/bookstore/123").accept(MediaType.APPLICATION_XML_TYPE);
+ Book b = readBook((InputStream)client.get().getEntity());
+ assertEquals(123, b.getId());
+ assertEquals("CXF in Action", b.getName());
+ }
+
+ @Test
+ public void testGetBook356ClientException() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+
+ ProviderFactory.getInstance().registerUserProvider(new TestResponseExceptionMapper());
+ try {
+ proxy.getBook(356L);
+ fail();
+ } catch (BookNotFoundFault ex) {
+ assertEquals("No Book with id 356 is available", ex.getMessage());
+ }
+ }
+
+
+ @Test
+ public void testGetBookSubresourceClient() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+ BookSubresource bs = proxy.getBookSubresource("125");
+ Book b = bs.getTheBook();
+ assertEquals(125, b.getId());
+ assertEquals("CXF in Action", b.getName());
+ }
+
+ @Test
+ public void testGetBookSubresourceClient2() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+ doTestSubresource(proxy);
+ }
+
+ @Test
+ public void testGetBookSubresourceWebClientProxy() throws Exception {
+
+ WebClient client = new WebClient("http://localhost:9092/test/services/rest");
+ client.type(MediaType.TEXT_PLAIN_TYPE).accept(MediaType.APPLICATION_XML_TYPE);
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.fromClient(client, BookStoreJaxrsJaxws.class, true);
+
+ doTestSubresource(proxy);
+
+ BookStoreJaxrsJaxws proxy2 = JAXRSClientFactory.fromClient(
+ WebClient.client(proxy), BookStoreJaxrsJaxws.class);
+ doTestSubresource(proxy2);
+
+ }
+
+
+ @Test
+ public void testGetBookSubresourceWebClientProxy2() throws Exception {
+
+ WebClient client = new WebClient("http://localhost:9092/test/services/rest/bookstore")
+ .path("/books/378");
+ client.type(MediaType.TEXT_PLAIN_TYPE).accept(MediaType.APPLICATION_XML_TYPE);
+ BookSubresource proxy = JAXRSClientFactory.fromClient(client, BookSubresource.class);
+
+ Book b = proxy.getTheBook2("CXF ", "in ", "Action ", "- 3", "7", "8");
+ assertEquals(378, b.getId());
+ assertEquals("CXF in Action - 378", b.getName());
+
+ }
+
+ private void doTestSubresource(BookStoreJaxrsJaxws proxy) throws Exception {
+ BookSubresource bs = proxy.getBookSubresource("378");
+
+ Book b = bs.getTheBook2("CXF ", "in ", "Action ", "- 3", "7", "8");
+ assertEquals(378, b.getId());
+ assertEquals("CXF in Action - 378", b.getName());
+
+ WebClient.client(bs).reset().header("N4", "- 4");
+ b = bs.getTheBook2("CXF ", "in ", "Action ", null, "7", "8");
+ assertEquals(378, b.getId());
+ assertEquals("CXF in Action - 478", b.getName());
+ }
+
+ @Test
+ public void testGetBookWebClientForm() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest/bookstore/books/679/subresource3";
+ WebClient wc = new WebClient(baseAddress);
+ MultivaluedMap<String, Object> map = new MetadataMap<String, Object>();
+ map.putSingle("id", "679");
+ map.putSingle("name", "CXF in Action - 679");
+ Book b = readBook((InputStream)wc.accept("application/xml")
+ .form((Map<String, List<Object>>)map).getEntity());
+ assertEquals(679, b.getId());
+ assertEquals("CXF in Action - 679", b.getName());
+ }
+
+ @Test
+ public void testGetBookWebClientForm2() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest/bookstore/books/679/subresource3";
+ WebClient wc = new WebClient(baseAddress);
+ Form f = new Form();
+ f.set("id", "679").set("name", "CXF in Action - 679");
+ Book b = readBook((InputStream)wc.accept("application/xml")
+ .form(f).getEntity());
+ assertEquals(679, b.getId());
+ assertEquals("CXF in Action - 679", b.getName());
+ }
+
+ @Test
+ public void testGetBookSubresourceClientFormParam() throws Exception {
+
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+ BookSubresource bs = proxy.getBookSubresource("679");
+ Book b = bs.getTheBook3("679", "CXF in Action - 679");
+ assertEquals(679, b.getId());
+ assertEquals("CXF in Action - 679", b.getName());
+ }
+
+ @Test
+ public void testAddGetBook123WebClient() throws Exception {
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ WebClient client = new WebClient(baseAddress);
+ client.path("/bookstore/books").accept(MediaType.APPLICATION_XML_TYPE)
+ .type(MediaType.APPLICATION_XML_TYPE);
+ Book b = new Book();
+ b.setId(124);
+ b.setName("CXF in Action - 2");
+ Book b2 = client.post(b, Book.class);
+ assertNotSame(b, b2);
+ assertEquals(124, b2.getId());
+ assertEquals("CXF in Action - 2", b2.getName());
+ }
+
+ @Test
+ public void testAddGetBook123Client() throws Exception {
+ String baseAddress = "http://localhost:9092/test/services/rest";
+ BookStoreJaxrsJaxws proxy = JAXRSClientFactory.create(baseAddress,
+ BookStoreJaxrsJaxws.class);
+ Book b = new Book();
+ b.setId(124);
+ b.setName("CXF in Action - 2");
+ Book b2 = proxy.addBook(b);
+ assertNotSame(b, b2);
+ assertEquals(124, b2.getId());
+ assertEquals("CXF in Action - 2", b2.getName());
+ }
+
+ @Test
public void testAddGetBookRest() throws Exception {
String endpointAddress =
@@ -117,4 +322,25 @@
connect.addRequestProperty("Accept", "application/xml,text/plain");
return connect.getInputStream();
}
+
+ private Book readBook(InputStream is) throws Exception {
+ JAXBContext c = JAXBContext.newInstance(new Class[]{Book.class});
+ Unmarshaller u = c.createUnmarshaller();
+ return (Book)u.unmarshal(is);
+ }
+
+ public static class TestResponseExceptionMapper implements ResponseExceptionMapper<BookNotFoundFault> {
+
+ public TestResponseExceptionMapper() {
+ }
+
+ public BookNotFoundFault fromResponse(Response r) {
+ Object value = r.getMetadata().getFirst("BOOK-HEADER");
+ if (value != null) {
+ return new BookNotFoundFault(value.toString());
+ }
+ throw new WebApplicationException();
+ }
+
+ }
}
Modified: cxf/trunk/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml?rev=743825&r1=743824&r2=743825&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml (original)
+++ cxf/trunk/systests/src/test/resources/jaxrs_soap_rest/WEB-INF/beans.xml Thu Feb 12 18:26:07 2009
@@ -35,7 +35,6 @@
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
-
<jaxws:endpoint xmlns:s="http://books.com"
serviceName="s:BookService"
endpointName="s:BookPort"
@@ -49,9 +48,8 @@
<ref bean="bookstore"/>
</jaxrs:serviceBeans>
</jaxrs:server>
- <bean id="bookstore" class="org.apache.cxf.systest.jaxrs.BookStoreSoapRestImpl">
- </bean>
-
+ <bean id="bookstore" class="org.apache.cxf.systest.jaxrs.BookStoreSoapRestImpl"/>
+
<jaxws:endpoint xmlns:s="http://books.com"
serviceName="s:BookService"
endpointName="s:BookPort"
@@ -65,8 +63,7 @@
<ref bean="bookstore2"/>
</jaxrs:serviceBeans>
</jaxrs:server>
- <bean id="bookstore2" class="org.apache.cxf.systest.jaxrs.BookStoreSoapRestImpl2">
- </bean>
+ <bean id="bookstore2" class="org.apache.cxf.systest.jaxrs.BookStoreSoapRestImpl2"/>
</beans>
<!-- END SNIPPET: beans -->