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 2014/01/31 19:18:17 UTC
svn commit: r1563197 - in /cxf/trunk/rt/frontend/jaxrs/src:
main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
Author: sergeyb
Date: Fri Jan 31 18:18:17 2014
New Revision: 1563197
URL: http://svn.apache.org/r1563197
Log:
[CXF-5348] Fix to get complex typed mappers correctly selected
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1563197&r1=1563196&r2=1563197&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Fri Jan 31 18:18:17 2014
@@ -999,9 +999,13 @@ public abstract class ProviderFactory {
}
if (expectedClass != null) {
Type genericSuperType = cls.getGenericSuperclass();
- if (genericSuperType instanceof ParameterizedType
- && expectedClass == InjectionUtils.getActualType(genericSuperType)) {
- return new Type[]{genericSuperType};
+ if (genericSuperType instanceof ParameterizedType) {
+ Class<?> actualType = InjectionUtils.getActualType(genericSuperType);
+ if (expectedClass == actualType) {
+ return new Type[]{genericSuperType};
+ } else if (expectedClass.isAssignableFrom(actualType)) {
+ return new Type[]{};
+ }
}
}
Type[] types = cls.getGenericInterfaces();
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java?rev=1563197&r1=1563196&r2=1563197&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java Fri Jan 31 18:18:17 2014
@@ -38,6 +38,7 @@ import javax.ws.rs.WebApplicationExcepti
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.MessageBodyReader;
@@ -358,6 +359,17 @@ public class ProviderFactoryTest extends
"application/json");
}
+ @Test
+ public void testComplexExceptionMapper() {
+ ServerProviderFactory pf = ServerProviderFactory.getInstance();
+ pf.registerUserProvider(new SecurityExceptionMapper());
+ ExceptionMapper<SecurityException> mapper =
+ pf.createExceptionMapper(SecurityException.class, new MessageImpl());
+ assertTrue(mapper instanceof SecurityExceptionMapper);
+ ExceptionMapper<Throwable> mapper2 =
+ pf.createExceptionMapper(Throwable.class, new MessageImpl());
+ assertNull(mapper2);
+ }
@Test
public void testRegisterCustomResolver() throws Exception {
@@ -758,4 +770,14 @@ public class ProviderFactoryTest extends
public static class AClass {
}
+ private static class SecurityExceptionMapper
+ extends AbstractBadRequestExceptionMapper<SecurityException> {
+ }
+ private abstract static class AbstractBadRequestExceptionMapper<T extends Throwable>
+ implements ExceptionMapper<T> {
+ @Override
+ public Response toResponse(T exception) {
+ return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
+ }
+ }
}