Package org.springframework.http.converter.xml

# Class Jaxb2CollectionHttpMessageConverter<T extends Collection>

java.lang.Object
org.springframework.http.converter.AbstractHttpMessageConverter<T>
org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter<T>
org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter<T>
org.springframework.http.converter.xml.Jaxb2CollectionHttpMessageConverter<T>

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

## Field Summary

### Fields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`logger`

## Constructor Summary

Constructors
Constructor
Description
`Jaxb2CollectionHttpMessageConverter()`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`canRead(Class<?> clazz, MediaType mediaType)`
Always returns `false` since Jaxb2CollectionHttpMessageConverter required generic type information in order to read a Collection.
`boolean`
`canRead(Type type, Class<?> contextClass, MediaType mediaType)`
Indicates whether the given type can be read by this converter.
`boolean`
`canWrite(Class<?> clazz, MediaType mediaType)`
Always returns `false` since Jaxb2CollectionHttpMessageConverter does not convert collections to XML.
`boolean`
`canWrite(Type type, Class<?> clazz, MediaType mediaType)`
Always returns `false` since Jaxb2CollectionHttpMessageConverter does not convert collections to XML.
`protected T`
`createCollection(Class<?> collectionClass)`
Create a Collection of the given type, with the given initial capacity (if supported by the Collection type).
`protected XMLInputFactory`
`createXmlInputFactory()`
Create an `XMLInputFactory` that this converter will use to create `XMLStreamReader` and `XMLEventReader` objects.
`T`
`read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)`
Read an object of the given type from the given input message, and returns it.
`protected T`
`readFromSource(Class<? extends T> clazz, HttpHeaders headers, Source source)`
Abstract template method called from `AbstractHttpMessageConverter.read(Class, HttpInputMessage)`.
`protected boolean`
`supports(Class<?> clazz)`
Indicates whether the given class is supported by this converter.
`void`
`write(T t, Type type, MediaType contentType, HttpOutputMessage outputMessage)`
Write a given object to the given output message.
`protected void`
`writeToResult(T t, HttpHeaders headers, Result result)`
Abstract template method called from `AbstractXmlHttpMessageConverter.writeInternal(Object, HttpOutputMessage)`.

### Methods inherited from class org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter

`createMarshaller, createUnmarshaller, customizeMarshaller, customizeUnmarshaller, detectCharset, getJaxbContext`

### Methods inherited from class org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter

`readInternal, transform, writeInternal`

### Methods inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`addDefaultHeaders, canRead, canWrite, getContentLength, getDefaultCharset, getDefaultContentType, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, supportsRepeatableWrites, write`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.http.converter.HttpMessageConverter

`getSupportedMediaTypes, getSupportedMediaTypes, read, write`

## 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`
Abstract template method called from `AbstractHttpMessageConverter.read(Class, HttpInputMessage)`.

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 from 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`
Abstract template method called from `AbstractXmlHttpMessageConverter.writeInternal(Object, HttpOutputMessage)`.

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()`