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 2013/07/11 14:18:44 UTC
svn commit: r1502200 - in
/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider:
CachingMessageBodyReader.java CachingMessageBodyWriter.java
Author: sergeyb
Date: Thu Jul 11 12:18:44 2013
New Revision: 1502200
URL: http://svn.apache.org/r1502200
Log:
Updates to caching JAXRS providers to handle lists of delegating providers, example, when XML and JSON providers are configured alongside it
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyReader.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyWriter.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyReader.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyReader.java?rev=1502200&r1=1502199&r2=1502200&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyReader.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyReader.java Thu Jul 11 12:18:44 2013
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.List;
import javax.ws.rs.NotAcceptableException;
import javax.ws.rs.WebApplicationException;
@@ -35,16 +37,24 @@ import javax.ws.rs.ext.Provider;
public class CachingMessageBodyReader<T> extends AbstractCachingMessageProvider<T>
implements MessageBodyReader<T> {
- private MessageBodyReader<T> delegatingReader;
+ private List<MessageBodyReader<T>> delegatingReaders;
public boolean isReadable(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
- if (delegatingReader != null) {
- return delegatingReader.isReadable(type, gType, anns, mt);
+ if (delegatingReaders != null) {
+ return getDelegatingReader(type, gType, anns, mt) != null;
} else {
return isProviderKeyNotSet();
}
}
+ private MessageBodyReader<T> getDelegatingReader(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
+ for (MessageBodyReader<T> reader: delegatingReaders) {
+ if (reader.isReadable(type, gType, anns, mt)) {
+ return reader;
+ }
+ }
+ return null;
+ }
public T readFrom(Class<T> type, Type gType, Annotation[] anns, MediaType mt,
MultivaluedMap<String, String> theheaders, InputStream is)
@@ -56,8 +66,8 @@ public class CachingMessageBodyReader<T>
protected MessageBodyReader<T> getReader(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
- if (delegatingReader != null) {
- return delegatingReader;
+ if (delegatingReaders != null) {
+ return getDelegatingReader(type, gType, anns, mt);
}
MessageBodyReader<T> r = null;
@@ -79,4 +89,12 @@ public class CachingMessageBodyReader<T>
return r;
}
+ public void setDelegatingReader(MessageBodyReader<T> reader) {
+ this.delegatingReaders = Collections.singletonList(reader);
+ }
+
+ public void setDelegatingReaders(List<MessageBodyReader<T>> readers) {
+ this.delegatingReaders = readers;
+ }
+
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyWriter.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyWriter.java?rev=1502200&r1=1502199&r2=1502200&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyWriter.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/CachingMessageBodyWriter.java Thu Jul 11 12:18:44 2013
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.List;
import javax.ws.rs.InternalServerErrorException;
import javax.ws.rs.WebApplicationException;
@@ -35,20 +37,28 @@ import javax.ws.rs.ext.Provider;
public class CachingMessageBodyWriter<T> extends AbstractCachingMessageProvider<T>
implements MessageBodyWriter<T> {
- private MessageBodyWriter<T> delegatingWriter;
+ private List<MessageBodyWriter<T>> delegatingWriters;
public long getSize(T t, Class<?> type, Type gType, Annotation[] anns, MediaType mediaType) {
return -1;
}
public boolean isWriteable(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
- if (delegatingWriter != null) {
- return delegatingWriter.isWriteable(type, gType, anns, mt);
+ if (delegatingWriters != null) {
+ return getDelegatingWriter(type, gType, anns, mt) != null;
} else {
return isProviderKeyNotSet();
}
}
+ private MessageBodyWriter<T> getDelegatingWriter(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
+ for (MessageBodyWriter<T> writer: delegatingWriters) {
+ if (writer.isWriteable(type, gType, anns, mt)) {
+ return writer;
+ }
+ }
+ return null;
+ }
public void writeTo(T obj, Class<?> type, Type gType, Annotation[] anns, MediaType mt,
MultivaluedMap<String, Object> theheaders, OutputStream os)
@@ -59,8 +69,8 @@ public class CachingMessageBodyWriter<T>
protected MessageBodyWriter<T> getWriter(Class<?> type, Type gType, Annotation[] anns, MediaType mt) {
- if (delegatingWriter != null) {
- return delegatingWriter;
+ if (delegatingWriters != null) {
+ return getDelegatingWriter(type, gType, anns, mt);
}
MessageBodyWriter<T> w = null;
@@ -81,4 +91,12 @@ public class CachingMessageBodyWriter<T>
}
return w;
}
+
+ public void setDelegatingWriter(MessageBodyWriter<T> writer) {
+ this.delegatingWriters = Collections.singletonList(writer);
+ }
+
+ public void setDelegatingWriters(List<MessageBodyWriter<T>> writers) {
+ this.delegatingWriters = writers;
+ }
}