public abstract class AbstractCollectionJaxbProvider extends AbstractJaxbProvider<java.lang.Object>
T[]
, Collection<T>
,
and its subtypes as long as they have the public default constructor or
are interfaces implemented by one the following classes:
ArrayList
LinkedList
HashSet
TreeSet
Stack
T
must be a JAXB type annotated with XmlRootElement
.
Implementing classes may extend this class to provide specific marshalling and unmarshalling behaviour.
When unmarshalling a UnmarshalException
will result in a
WebApplicationException
being thrown with a status of 400
(Client error), and a JAXBException
will result in a
WebApplicationException
being thrown with a status of 500
(Internal Server error).
When marshalling a JAXBException
will result in a
WebApplicationException
being thrown with a status of 500
(Internal Server error).
Modifier and Type | Class and Description |
---|---|
static interface |
AbstractCollectionJaxbProvider.JaxbTypeChecker
This is to allow customized JAXB collections checking.
|
Modifier and Type | Field and Description |
---|---|
private static java.lang.Class<?>[] |
DEFAULT_IMPLS |
private static AbstractCollectionJaxbProvider.JaxbTypeChecker |
DefaultJaxbTypeCHECKER |
private NounInflector |
inflector |
private static java.util.logging.Logger |
LOGGER |
UTF8
Constructor and Description |
---|
AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps) |
AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps,
javax.ws.rs.core.MediaType mt) |
Modifier and Type | Method and Description |
---|---|
private static java.lang.String |
convertToXmlName(java.lang.String name) |
private static java.lang.Object |
createArray(java.util.Collection<?> collection,
java.lang.Class componentType) |
protected static java.lang.Class |
getElementClass(java.lang.Class<?> type,
java.lang.reflect.Type genericType) |
protected static java.lang.String |
getElementName(java.lang.Class<?> elementType)
Get the element name for a given Java type.
|
protected java.lang.String |
getRootElementName(java.lang.Class<?> elementType)
Construct the name of the root element from it's Java type name.
|
protected abstract javax.xml.stream.XMLStreamReader |
getXMLStreamReader(java.lang.Class<?> elementType,
javax.ws.rs.core.MediaType mediaType,
javax.xml.bind.Unmarshaller unmarshaller,
java.io.InputStream entityStream)
Get the
XMLStreamReader for unmarshalling. |
boolean |
isReadable(java.lang.Class<?> type,
java.lang.reflect.Type genericType,
java.lang.annotation.Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType) |
boolean |
isWriteable(java.lang.Class<?> type,
java.lang.reflect.Type genericType,
java.lang.annotation.Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType) |
java.lang.Object |
readFrom(java.lang.Class<java.lang.Object> type,
java.lang.reflect.Type genericType,
java.lang.annotation.Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType,
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> httpHeaders,
java.io.InputStream inputStream) |
private static boolean |
verifyArrayType(java.lang.Class type) |
static boolean |
verifyArrayType(java.lang.Class type,
AbstractCollectionJaxbProvider.JaxbTypeChecker checker)
The method could be used to check if given type is an array of JAXB beans.
|
static boolean |
verifyCollectionSubclass(java.lang.Class<?> type) |
private static boolean |
verifyGenericType(java.lang.reflect.Type genericType) |
static boolean |
verifyGenericType(java.lang.reflect.Type genericType,
AbstractCollectionJaxbProvider.JaxbTypeChecker checker)
The method could be used to check if given type is a collection of JAXB beans.
|
abstract void |
writeCollection(java.lang.Class<?> elementType,
java.util.Collection<?> t,
javax.ws.rs.core.MediaType mediaType,
java.nio.charset.Charset c,
javax.xml.bind.Marshaller m,
java.io.OutputStream entityStream)
Write a collection of JAXB objects as child elements of the root element.
|
void |
writeTo(java.lang.Object t,
java.lang.Class<?> type,
java.lang.reflect.Type genericType,
java.lang.annotation.Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType,
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> httpHeaders,
java.io.OutputStream entityStream) |
getMarshaller, getSAXSource, getStoredJaxbContext, getUnmarshaller, isFormattedOutput, isSupported, isXmlRootElementProcessing, setConfiguration, setHeader
getCharset, getSize, readFromAsString, writeTo, writeTo, writeToAsString
private static final java.util.logging.Logger LOGGER
private static final java.lang.Class<?>[] DEFAULT_IMPLS
private static final AbstractCollectionJaxbProvider.JaxbTypeChecker DefaultJaxbTypeCHECKER
private final NounInflector inflector
public AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps)
public AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps, javax.ws.rs.core.MediaType mt)
public boolean isReadable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
public boolean isWriteable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
public static boolean verifyCollectionSubclass(java.lang.Class<?> type)
private static boolean verifyArrayType(java.lang.Class type)
public static boolean verifyArrayType(java.lang.Class type, AbstractCollectionJaxbProvider.JaxbTypeChecker checker)
type
- the array to be checkedchecker
- allows JAXB bean check customizationprivate static boolean verifyGenericType(java.lang.reflect.Type genericType)
public static boolean verifyGenericType(java.lang.reflect.Type genericType, AbstractCollectionJaxbProvider.JaxbTypeChecker checker)
genericType
- the type to be checkedchecker
- allows JAXB bean check customizationpublic final void writeTo(java.lang.Object t, java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> httpHeaders, java.io.OutputStream entityStream) throws java.io.IOException
java.io.IOException
public abstract void writeCollection(java.lang.Class<?> elementType, java.util.Collection<?> t, javax.ws.rs.core.MediaType mediaType, java.nio.charset.Charset c, javax.xml.bind.Marshaller m, java.io.OutputStream entityStream) throws javax.xml.bind.JAXBException, java.io.IOException
elementType
- the element type in the collection.t
- the collection to marshallmediaType
- the media typec
- the charsetm
- the marshallerentityStream
- the output stream to marshall the collectionjavax.xml.bind.JAXBException
- in case the marshalling of element collection fails.java.io.IOException
- in case of any other I/O error while marshalling the collection of JAXB objects.public final java.lang.Object readFrom(java.lang.Class<java.lang.Object> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> httpHeaders, java.io.InputStream inputStream) throws java.io.IOException
java.io.IOException
private static java.lang.Object createArray(java.util.Collection<?> collection, java.lang.Class componentType)
protected abstract javax.xml.stream.XMLStreamReader getXMLStreamReader(java.lang.Class<?> elementType, javax.ws.rs.core.MediaType mediaType, javax.xml.bind.Unmarshaller unmarshaller, java.io.InputStream entityStream) throws javax.xml.stream.XMLStreamException
XMLStreamReader
for unmarshalling.elementType
- the individual element type.mediaType
- the media type.unmarshaller
- the unmarshaller as a carrier of possible config options.entityStream
- the input stream.javax.xml.stream.XMLStreamException
- in case XMLStreamReader
retrieval fails.protected static java.lang.Class getElementClass(java.lang.Class<?> type, java.lang.reflect.Type genericType)
private static java.lang.String convertToXmlName(java.lang.String name)
protected final java.lang.String getRootElementName(java.lang.Class<?> elementType)
elementType
- element Java type.protected static java.lang.String getElementName(java.lang.Class<?> elementType)
In case the element is annotated with a XmlRootElement
annotation
and the specified element name
is not default,
the method returns the specified element name in the annotation. Otherwise, the method returns the name of
the element class instead.
elementType
- element Java type.