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:ArrayListLinkedListHashSetTreeSetStack
Tmust be a JAXB type annotated withXmlRootElement.Implementing classes may extend this class to provide specific marshalling and unmarshalling behaviour.
When unmarshalling a
UnmarshalExceptionwill result in aWebApplicationExceptionbeing thrown with a status of 400 (Client error), and aJAXBExceptionwill result in aWebApplicationExceptionbeing thrown with a status of 500 (Internal Server error).When marshalling a
JAXBExceptionwill result in aWebApplicationExceptionbeing thrown with a status of 500 (Internal Server error).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceAbstractCollectionJaxbProvider.JaxbTypeCheckerThis is to allow customized JAXB collections checking.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.Class<?>[]DEFAULT_IMPLSprivate static AbstractCollectionJaxbProvider.JaxbTypeCheckerDefaultJaxbTypeCHECKERprivate NounInflectorinflectorprivate static java.util.logging.LoggerLOGGER-
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.StringconvertToXmlName(java.lang.String name)private static java.lang.ObjectcreateArray(java.util.Collection<?> collection, java.lang.Class componentType)protected static java.lang.ClassgetElementClass(java.lang.Class<?> type, java.lang.reflect.Type genericType)protected static java.lang.StringgetElementName(java.lang.Class<?> elementType)Get the element name for a given Java type.protected java.lang.StringgetRootElementName(java.lang.Class<?> elementType)Construct the name of the root element from it's Java type name.protected abstract javax.xml.stream.XMLStreamReadergetXMLStreamReader(java.lang.Class<?> elementType, javax.ws.rs.core.MediaType mediaType, javax.xml.bind.Unmarshaller unmarshaller, java.io.InputStream entityStream)Get theXMLStreamReaderfor unmarshalling.booleanisReadable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)booleanisWriteable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)java.lang.ObjectreadFrom(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 booleanverifyArrayType(java.lang.Class type)static booleanverifyArrayType(java.lang.Class type, AbstractCollectionJaxbProvider.JaxbTypeChecker checker)The method could be used to check if given type is an array of JAXB beans.static booleanverifyCollectionSubclass(java.lang.Class<?> type)private static booleanverifyGenericType(java.lang.reflect.Type genericType)static booleanverifyGenericType(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 voidwriteCollection(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.voidwriteTo(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.IOExceptionWrite 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.XMLStreamExceptionGet theXMLStreamReaderfor 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 caseXMLStreamReaderretrieval 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
XmlRootElementannotation and thespecified element nameis 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.
-
-