Author: sergeyb Date: Mon Jan 17 16:09:54 2011 New Revision: 1059968 URL: http://svn.apache.org/viewvc?rev=1059968&view=rev Log: [CXF-3248] Application.getClasses() may also return provider classes
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookExceptionMapper.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=1059968&r1=1059967&r2=1059968&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java Mon Jan 17 16:09:54 2011 @@ -550,12 +550,20 @@ public final class ResourceUtils { List<Object> providers = new ArrayList<Object>(); Map<Class, ResourceProvider> map = new HashMap<Class, ResourceProvider>(); - // at the moment we don't support per-request providers, only resource classes // Note, app.getClasse() returns a list of per-resource classes + // or singleton provider classes for (Class<?> c : app.getClasses()) { - if (isValidPerRequestResourceClass(c, singletons)) { - resourceClasses.add(c); - map.put(c, new PerRequestResourceProvider(c)); + if (isValidApplicationClass(c, singletons)) { + if (c.getAnnotation(Provider.class) != null) { + try { + providers.add(c.newInstance()); + } catch (Throwable ex) { + throw new RuntimeException("Provider " + c.getName() + " can not be created", ex); + } + } else { + resourceClasses.add(c); + map.put(c, new PerRequestResourceProvider(c)); + } } } @@ -611,7 +619,7 @@ public final class ResourceUtils { return true; } - private static boolean isValidPerRequestResourceClass(Class<?> c, Set<Object> singletons) { + private static boolean isValidApplicationClass(Class<?> c, Set<Object> singletons) { if (!isValidResourceClass(c)) { return false; } Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java?rev=1059968&r1=1059967&r2=1059968&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java Mon Jan 17 16:09:54 2011 @@ -32,6 +32,7 @@ public class BookApplication extends App Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(org.apache.cxf.systest.jaxrs.BookStorePerRequest.class); classes.add(org.apache.cxf.systest.jaxrs.jaxws.BookStoreJaxrsJaxws.class); + classes.add(org.apache.cxf.systest.jaxrs.RuntimeExceptionMapper.class); return classes; } @@ -39,6 +40,9 @@ public class BookApplication extends App public Set<Object> getSingletons() { Set<Object> classes = new HashSet<Object>(); classes.add(new org.apache.cxf.systest.jaxrs.BookStore()); + BookExceptionMapper mapper = new org.apache.cxf.systest.jaxrs.BookExceptionMapper(); + mapper.setToHandle(true); + classes.add(mapper); return classes; } Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookExceptionMapper.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookExceptionMapper.java?rev=1059968&r1=1059967&r2=1059968&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookExceptionMapper.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookExceptionMapper.java Mon Jan 17 16:09:54 2011 @@ -21,7 +21,9 @@ package org.apache.cxf.systest.jaxrs; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +@Provider public class BookExceptionMapper implements ExceptionMapper<BookNotFoundFault> { private boolean toHandle; Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java?rev=1059968&r1=1059967&r2=1059968&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerNonSpringBookTest.java Mon Jan 17 16:09:54 2011 @@ -30,6 +30,7 @@ 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.JAXRSClientFactoryBean; +import org.apache.cxf.jaxrs.client.ServerWebApplicationException; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -146,6 +147,32 @@ public class JAXRSClientServerNonSpringB } + @Test + public void testGetNonExistentBook() throws Exception { + WebClient wc = WebClient.create("http://localhost:" + PORT + + "/application11/thebooks/bookstore/books/321"); + try { + wc.accept("*/*").get(Book.class); + fail(); + } catch (ServerWebApplicationException ex) { + assertEquals("No book found at all : 321", ex.getMessage()); + } + + } + + @Test + public void testBookWithNonExistentMethod() throws Exception { + WebClient wc = WebClient.create("http://localhost:" + PORT + + "/application11/thebooks/bookstore/nonexistent"); + try { + wc.accept("*/*").get(Book.class); + fail(); + } catch (ServerWebApplicationException ex) { + assertEquals("Nonexistent method", ex.getMessage()); + } + + } + private void getAndCompareAsStrings(String address, String resourcePath, String acceptType, Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java?rev=1059968&r1=1059967&r2=1059968&view=diff ============================================================================== --- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java (original) +++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java Mon Jan 17 16:09:54 2011 @@ -22,7 +22,9 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +@Provider public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> { @Context