Class 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 for T[], Collection&lt;T&gt;, 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).

    • Constructor Detail

      • AbstractCollectionJaxbProvider

        public AbstractCollectionJaxbProvider​(javax.ws.rs.ext.Providers ps)
      • AbstractCollectionJaxbProvider

        public AbstractCollectionJaxbProvider​(javax.ws.rs.ext.Providers ps,
                                              javax.ws.rs.core.MediaType mt)
    • 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 checked
        checker - 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 checked
        checker - 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 marshall
        mediaType - the media type
        c - the charset
        m - the marshaller
        entityStream - 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 the XMLStreamReader 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 case XMLStreamReader 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 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.

        Parameters:
        elementType - element Java type.
        Returns:
        element name for a given element Java type.