Class Jaxb2CollectionHttpMessageConverter<T extends Collection>

Type Parameters:
T - the converted object type
All Implemented Interfaces:
GenericHttpMessageConverter<T>, HttpMessageConverter<T>

public class Jaxb2CollectionHttpMessageConverter<T extends Collection> extends AbstractJaxb2HttpMessageConverter<T> implements GenericHttpMessageConverter<T>
An HttpMessageConverter that can read XML collections using JAXB2.

This converter can read collections that contain classes annotated with XmlRootElement and XmlType. Note that this converter does not support writing.

Since:
3.2
Author:
Arjen Poutsma, Rossen Stoyanchev, Sam Brannen
  • Constructor Details

    • Jaxb2CollectionHttpMessageConverter

      public Jaxb2CollectionHttpMessageConverter()
  • Method Details

    • canRead

      public boolean canRead(Class<?> clazz, @Nullable MediaType mediaType)
      Always returns false since Jaxb2CollectionHttpMessageConverter required generic type information in order to read a Collection.
      Specified by:
      canRead in interface HttpMessageConverter<T extends Collection>
      Overrides:
      canRead in class AbstractHttpMessageConverter<T extends Collection>
      Parameters:
      clazz - the class to test for readability
      mediaType - the media type to read (can be null if not specified); typically the value of a Content-Type header.
      Returns:
      true if readable; false otherwise
    • canRead

      public boolean canRead(Type type, @Nullable Class<?> contextClass, @Nullable MediaType mediaType)
      Indicates whether the given type can be read by this converter. This method should perform the same checks as HttpMessageConverter.canRead(Class, MediaType) with additional ones related to the generic type.

      Jaxb2CollectionHttpMessageConverter can read a generic Collection where the generic type is a JAXB type annotated with XmlRootElement or XmlType.

      Specified by:
      canRead in interface GenericHttpMessageConverter<T extends Collection>
      Parameters:
      type - the (potentially generic) type to test for readability
      contextClass - a context class for the target type, for example a class in which the target type appears in a method signature (can be null)
      mediaType - the media type to read, can be null if not specified. Typically, the value of a Content-Type header.
      Returns:
      true if readable; false otherwise
    • canWrite

      public boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType)
      Always returns false since Jaxb2CollectionHttpMessageConverter does not convert collections to XML.
      Specified by:
      canWrite in interface HttpMessageConverter<T extends Collection>
      Overrides:
      canWrite in class AbstractHttpMessageConverter<T extends Collection>
      Parameters:
      clazz - the class to test for writability
      mediaType - the media type to write (can be null if not specified); typically the value of an Accept header.
      Returns:
      true if writable; false otherwise
    • canWrite

      public boolean canWrite(@Nullable Type type, @Nullable Class<?> clazz, @Nullable MediaType mediaType)
      Always returns false since Jaxb2CollectionHttpMessageConverter does not convert collections to XML.
      Specified by:
      canWrite in interface GenericHttpMessageConverter<T extends Collection>
      Parameters:
      type - the (potentially generic) type to test for writability (can be null if not specified)
      clazz - the source object class to test for writability
      mediaType - the media type to write (can be null if not specified); typically the value of an Accept header.
      Returns:
      true if writable; false otherwise
    • supports

      protected boolean supports(Class<?> clazz)
      Description copied from class: AbstractHttpMessageConverter
      Indicates whether the given class is supported by this converter.
      Specified by:
      supports in class AbstractHttpMessageConverter<T extends Collection>
      Parameters:
      clazz - the class to test for support
      Returns:
      true if supported; false otherwise
    • readFromSource

      protected T readFromSource(Class<? extends T> clazz, HttpHeaders headers, Source source) throws Exception
      Description copied from class: AbstractXmlHttpMessageConverter
      Specified by:
      readFromSource in class AbstractXmlHttpMessageConverter<T extends Collection>
      Parameters:
      clazz - the type of object to return
      headers - the HTTP input headers
      source - the HTTP input body
      Returns:
      the converted object
      Throws:
      Exception - in case of I/O or conversion errors
    • read

      public T read(Type type, @Nullable Class<?> contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
      Description copied from interface: GenericHttpMessageConverter
      Read an object of the given type form the given input message, and returns it.
      Specified by:
      read in interface GenericHttpMessageConverter<T extends Collection>
      Parameters:
      type - the (potentially generic) type of object to return. This type must have previously been passed to the canRead method of this interface, which must have returned true.
      contextClass - a context class for the target type, for example a class in which the target type appears in a method signature (can be null)
      inputMessage - the HTTP input message to read from
      Returns:
      the converted object
      Throws:
      IOException - in case of I/O errors
      HttpMessageNotReadableException - in case of conversion errors
    • createCollection

      protected T createCollection(Class<?> collectionClass)
      Create a Collection of the given type, with the given initial capacity (if supported by the Collection type).
      Parameters:
      collectionClass - the type of Collection to instantiate
      Returns:
      the created Collection instance
    • write

      public void write(T t, @Nullable Type type, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException
      Description copied from interface: GenericHttpMessageConverter
      Write a given object to the given output message.
      Specified by:
      write in interface GenericHttpMessageConverter<T extends Collection>
      Parameters:
      t - the object to write to the output message. The type of this object must have previously been passed to the canWrite method of this interface, which must have returned true.
      type - the (potentially generic) type of object to write. This type must have previously been passed to the canWrite method of this interface, which must have returned true. Can be null if not specified.
      contentType - the content type to use when writing. May be null to indicate that the default content type of the converter must be used. If not null, this media type must have previously been passed to the canWrite method of this interface, which must have returned true.
      outputMessage - the message to write to
      Throws:
      IOException - in case of I/O errors
      HttpMessageNotWritableException - in case of conversion errors
    • writeToResult

      protected void writeToResult(T t, HttpHeaders headers, Result result) throws Exception
      Description copied from class: AbstractXmlHttpMessageConverter
      Specified by:
      writeToResult in class AbstractXmlHttpMessageConverter<T extends Collection>
      Parameters:
      t - the object to write to the output message
      headers - the HTTP output headers
      result - the HTTP output body
      Throws:
      Exception - in case of I/O or conversion errors
    • createXmlInputFactory

      protected XMLInputFactory createXmlInputFactory()
      Create an XMLInputFactory that this converter will use to create XMLStreamReader and XMLEventReader objects.

      Can be overridden in subclasses, adding further initialization of the factory. The resulting factory is cached, so this method will only be called once.

      See Also:
      • StaxUtils.createDefensiveInputFactory()