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