Class AbstractCollectionJaxbProvider
- java.lang.Object
-
- org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider<T>
-
- org.glassfish.jersey.jaxb.internal.AbstractJaxbProvider<java.lang.Object>
-
- org.glassfish.jersey.jaxb.internal.AbstractCollectionJaxbProvider
-
- All Implemented Interfaces:
javax.ws.rs.ext.MessageBodyReader<java.lang.Object>
,javax.ws.rs.ext.MessageBodyWriter<java.lang.Object>
- Direct Known Subclasses:
XmlCollectionJaxbProvider
public abstract class AbstractCollectionJaxbProvider extends AbstractJaxbProvider<java.lang.Object>
An abstract provider forT[]
,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 withXmlRootElement
.Implementing classes may extend this class to provide specific marshalling and unmarshalling behaviour.
When unmarshalling a
UnmarshalException
will result in aWebApplicationException
being thrown with a status of 400 (Client error), and aJAXBException
will result in aWebApplicationException
being thrown with a status of 500 (Internal Server error).When marshalling a
JAXBException
will result in aWebApplicationException
being thrown with a status of 500 (Internal Server error).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
AbstractCollectionJaxbProvider.JaxbTypeChecker
This is to allow customized JAXB collections checking.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.Class<?>[]
DEFAULT_IMPLS
private static AbstractCollectionJaxbProvider.JaxbTypeChecker
DefaultJaxbTypeCHECKER
private NounInflector
inflector
private static java.util.logging.Logger
LOGGER
-
Fields inherited from class org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider
UTF8
-
-
Constructor Summary
Constructors Constructor Description AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps)
AbstractCollectionJaxbProvider(javax.ws.rs.ext.Providers ps, javax.ws.rs.core.MediaType mt)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method 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 theXMLStreamReader
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)
-
Methods inherited from class org.glassfish.jersey.jaxb.internal.AbstractJaxbProvider
getMarshaller, getSAXSource, getStoredJaxbContext, getUnmarshaller, isFormattedOutput, isSupported, isXmlRootElementProcessing, setConfiguration, setHeader
-
Methods inherited from class org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider
getCharset, getSize, readFromAsString, writeTo, writeTo, writeToAsString
-
-
-
-
Field Detail
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
DEFAULT_IMPLS
private static final java.lang.Class<?>[] DEFAULT_IMPLS
-
DefaultJaxbTypeCHECKER
private static final AbstractCollectionJaxbProvider.JaxbTypeChecker DefaultJaxbTypeCHECKER
-
inflector
private final NounInflector inflector
-
-
Method Detail
-
isReadable
public boolean isReadable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
-
isWriteable
public boolean isWriteable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
-
verifyCollectionSubclass
public static boolean verifyCollectionSubclass(java.lang.Class<?> type)
-
verifyArrayType
private static boolean verifyArrayType(java.lang.Class type)
-
verifyArrayType
public 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. It allows customizing the "is this a JAXB bean?" part.- Parameters:
type
- the array to be checkedchecker
- allows JAXB bean check customization- Returns:
- true if given type is an array of JAXB beans
-
verifyGenericType
private static boolean verifyGenericType(java.lang.reflect.Type genericType)
-
verifyGenericType
public 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. It allows customizing the "is this a JAXB bean?" part.- Parameters:
genericType
- the type to be checkedchecker
- allows JAXB bean check customization- Returns:
- true if given type is a collection of JAXB beans
-
writeTo
public 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
- Throws:
java.io.IOException
-
writeCollection
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
Write a collection of JAXB objects as child elements of the root element.- Parameters:
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 collection- Throws:
javax.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.
-
readFrom
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
- Throws:
java.io.IOException
-
createArray
private static java.lang.Object createArray(java.util.Collection<?> collection, java.lang.Class componentType)
-
getXMLStreamReader
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
Get theXMLStreamReader
for unmarshalling.- Parameters:
elementType
- the individual element type.mediaType
- the media type.unmarshaller
- the unmarshaller as a carrier of possible config options.entityStream
- the input stream.- Returns:
- the XMLStreamReader.
- Throws:
javax.xml.stream.XMLStreamException
- in caseXMLStreamReader
retrieval fails.
-
getElementClass
protected static java.lang.Class getElementClass(java.lang.Class<?> type, java.lang.reflect.Type genericType)
-
convertToXmlName
private static java.lang.String convertToXmlName(java.lang.String name)
-
getRootElementName
protected final java.lang.String getRootElementName(java.lang.Class<?> elementType)
Construct the name of the root element from it's Java type name.- Parameters:
elementType
- element Java type.- Returns:
- constructed root element name for a given element Java type.
-
getElementName
protected static java.lang.String getElementName(java.lang.Class<?> elementType)
Get the element name for a given Java type.In case the element is annotated with a
XmlRootElement
annotation and thespecified 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.- Parameters:
elementType
- element Java type.- Returns:
- element name for a given element Java type.
-
-