Author: sergeyb
Date: Mon Jan 17 18:02:31 2011
New Revision: 1060030
URL: http://svn.apache.org/viewvc?rev=1060030&view=rev
Log:
[CXF-3247] Supporting providers with no generic parameters
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=1060030&r1=1060029&r2=1060030&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
Mon Jan 17 18:02:31 2011
@@ -174,7 +174,7 @@ public final class ProviderFactory {
List<ExceptionMapper<T>> candidates = new
LinkedList<ExceptionMapper<T>>();
for (ProviderInfo<ExceptionMapper> em : exceptionMappers) {
- handleMapper((List)candidates, em, exceptionType, m);
+ handleMapper((List)candidates, em, exceptionType, m,
ExceptionMapper.class);
}
if (candidates.size() == 0) {
return null;
@@ -189,7 +189,7 @@ public final class ProviderFactory {
List<ParameterHandler<T>> candidates = new
LinkedList<ParameterHandler<T>>();
for (ProviderInfo<ParameterHandler> em : paramHandlers) {
- handleMapper((List)candidates, em, paramType, null);
+ handleMapper((List)candidates, em, paramType, null,
ParameterHandler.class);
}
if (candidates.size() == 0) {
return null;
@@ -205,7 +205,7 @@ public final class ProviderFactory {
List<ResponseExceptionMapper<T>> candidates = new
LinkedList<ResponseExceptionMapper<T>>();
for (ProviderInfo<ResponseExceptionMapper> em :
responseExceptionMappers) {
- handleMapper((List)candidates, em, paramType, null);
+ handleMapper((List)candidates, em, paramType, null,
ResponseExceptionMapper.class);
}
if (candidates.size() == 0) {
return null;
@@ -215,7 +215,7 @@ public final class ProviderFactory {
}
private static void handleMapper(List<Object> candidates, ProviderInfo em,
- Class<?> expectedType, Message m) {
+ Class<?> expectedType, Message m,
Class<?> providerClass) {
Class<?> mapperClass = ClassHelper.getRealClass(em.getProvider());
Type[] types = getGenericInterfaces(mapperClass);
@@ -259,6 +259,8 @@ public final class ProviderFactory {
return;
}
}
+ } else if (t instanceof Class &&
((Class<?>)t).isAssignableFrom(providerClass)) {
+ candidates.add(em.getProvider());
}
}
}
@@ -433,7 +435,7 @@ public final class ProviderFactory {
InjectionUtils.injectContextMethods(ep.getProvider(), ep,
m);
return ep.getProvider();
}
- handleMapper((List)candidates, ep, type, m);
+ handleMapper((List)candidates, ep, type, m,
MessageBodyReader.class);
}
}
@@ -487,7 +489,7 @@ public final class ProviderFactory {
InjectionUtils.injectContextMethods(ep.getProvider(), ep,
m);
return ep.getProvider();
}
- handleMapper((List)candidates, ep, type, m);
+ handleMapper((List)candidates, ep, type, m,
MessageBodyWriter.class);
}
}
if (candidates.size() == 0) {
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=1060030&r1=1060029&r2=1060030&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
Mon Jan 17 18:02:31 2011
@@ -233,6 +233,21 @@ public class ProviderFactoryTest extends
}
@Test
+ public void testMessageBodyWriterNoTypes() throws Exception {
+ ProviderFactory pf = ProviderFactory.getInstance();
+ List<Object> providers = new ArrayList<Object>();
+ SuperBookReaderWriter2 superBookHandler = new SuperBookReaderWriter2();
+ providers.add(superBookHandler);
+ pf.setUserProviders(providers);
+ assertSame(superBookHandler,
+ pf.createMessageBodyReader(SuperBook.class,
SuperBook.class, new Annotation[]{},
+ MediaType.APPLICATION_XML_TYPE,
new MessageImpl()));
+ assertSame(superBookHandler,
+ pf.createMessageBodyWriter(SuperBook.class,
SuperBook.class, new Annotation[]{},
+ MediaType.APPLICATION_XML_TYPE,
new MessageImpl()));
+ }
+
+ @Test
public void testSortEntityProviders() throws Exception {
ProviderFactory pf = ProviderFactory.getInstance();
pf.registerUserProvider(new TestStringProvider());
@@ -602,6 +617,43 @@ public class ProviderFactoryTest extends
}
+ @Produces("application/xml")
+ @Consumes("application/xml")
+ private static class SuperBookReaderWriter2 implements MessageBodyReader,
MessageBodyWriter {
+
+ public boolean isReadable(Class type, Type genericType, Annotation[]
annotations,
+ MediaType mediaType) {
+ return true;
+ }
+
+ public Object readFrom(Class arg0, Type arg1, Annotation[] arg2,
MediaType arg3,
+ MultivaluedMap arg4, InputStream arg5)
+ throws IOException, WebApplicationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public long getSize(Object t, Class type, Type genericType,
+ Annotation[] annotations, MediaType mediaType) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public boolean isWriteable(Class type, Type genericType,
+ Annotation[] annotations, MediaType
mediaType) {
+ return true;
+ }
+
+
+ public void writeTo(Object arg0, Class arg1, Type arg2,
+ Annotation[] arg3, MediaType arg4, MultivaluedMap
arg5,
+ OutputStream arg6) throws IOException,
WebApplicationException {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
private static class TestHandler implements RequestHandler {
public Response handleRequest(Message m, ClassResourceInfo
resourceClass) {