com.fasterxml.jackson.jaxrs.xml

## Class JacksonXMLProvider

- java.lang.Object
- - com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>
  - - com.fasterxml.jackson.jaxrs.xml.JacksonXMLProvider

- All Implemented Interfaces:
    com.fasterxml.jackson.core.Versioned, javax.ws.rs.ext.MessageBodyReader<Object>, javax.ws.rs.ext.MessageBodyWriter<Object>
  Direct Known Subclasses:
    JacksonJaxbXMLProvider

      @Provider
      @Consumes(value="*/*")
      @Produces(value="*/*")
      public class JacksonXMLProvider
      extends ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>

  Basic implementation of JAX-RS abstractions (`MessageBodyReader`, `MessageBodyWriter`) needed for binding JSON ("application/json") content to and from Java Objects ("POJO"s).

  Actual data binding functionality is implemented by `ObjectMapper`: mapper to use can be configured in multiple ways:

  - By explicitly passing mapper to use in constructor
  - By explictly setting mapper to use by `ProviderBase.setMapper(MAPPER)`
  - By defining JAX-RS `Provider` that returns `XmlMapper`s.
  - By doing none of above, in which case a default mapper instance is constructed (and configured if configuration methods are called)
  The last method ("do nothing specific") is often good enough; explicit passing of Mapper is simple and explicit; and Provider-based method may make sense with Depedency Injection frameworks, or if Mapper has to be configured differently for different media types.

  Note that the default mapper instance will be automatically created if one of explicit configuration methods (like `ProviderBase.configure(com.fasterxml.jackson.jaxrs.cfg.JaxRSFeature, boolean)`) is called: if so, Provider-based introspection is NOT used, but the resulting Mapper is used as configured.

  Note that there is also a sub-class -- (`JacksonJaxbXMLProvider`) -- that is configured by default to use both Jackson and JAXB annotations for configuration (base class when used as-is defaults to using just Jackson annotations)

  Author:
    Tatu Saloranta

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected javax.ws.rs.ext.Providers` | `_providers` Injectable context object used to locate configured instance of `XmlMapper` to use for actual serialization.
    `static Annotations[]` | `BASIC_ANNOTATIONS` Default annotation sets to use, if not explicitly defined during construction: only Jackson annotations are used for the base class.

    - ### Fields inherited from class com.fasterxml.jackson.jaxrs.base.ProviderBase

      `_cfgCheckCanDeserialize, _cfgCheckCanSerialize, _cfgCustomUntouchables, _defaultReadView, _defaultWriteView, _jaxRSFeatures, _mapperConfig, _noContentExceptionRef, _readers, _unreadableClasses, _untouchables, _unwritableClasses, _writers, CLASS_NAME_NO_CONTENT_EXCEPTION, DEFAULT_UNREADABLES, DEFAULT_UNTOUCHABLES, DEFAULT_UNWRITABLES, HEADER_CONTENT_TYPE_OPTIONS, JAXRS_FEATURE_DEFAULTS, noContentExceptionSupplier`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JacksonXMLProvider()` Default constructor, usually used when provider is automatically configured to be used with JAX-RS implementation.
    `JacksonXMLProvider(Annotations... annotationsToUse)`
    `JacksonXMLProvider(XmlMapper mapper)`
    `JacksonXMLProvider(XmlMapper mapper, Annotations[] annotationsToUse)` Constructor to use when a custom mapper (usually components like serializer/deserializer factories that have been configured) is to be used.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected XMLEndpointConfig` | `_configForReading(com.fasterxml.jackson.databind.ObjectReader reader, Annotation[] annotations)`
    `protected XMLEndpointConfig` | `_configForWriting(com.fasterxml.jackson.databind.ObjectWriter writer, Annotation[] annotations)`
    `protected com.fasterxml.jackson.core.JsonParser` | `_createParser(com.fasterxml.jackson.databind.ObjectReader reader, InputStream rawStream)` Overridable helper method called to create a `JsonParser` for reading contents of given raw `InputStream`.
    `XmlMapper` | `_locateMapperViaProvider(Class<?> type, javax.ws.rs.core.MediaType mediaType)` Method called to locate `XmlMapper` to use for serialization and deserialization.
    `protected boolean` | `hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)` Helper method used to check whether given media type is XML type or sub type.
    `com.fasterxml.jackson.core.Version` | `version()` Method that will return version information stored in and read from jar that contains this class.

    - ### Methods inherited from class com.fasterxml.jackson.jaxrs.base.ProviderBase

      `_addSuperTypes, _configForReading, _configForWriting, _containedIn, _createGenerator, _createNoContentException, _endpointForReading, _endpointForWriting, _findCustomUntouchable, _isIgnorableForReading, _isIgnorableForWriting, _isSpecialReadable, _modifyHeaders, addUntouchable, checkCanDeserialize, checkCanSerialize, configure, configure, configure, configure, configure, disable, disable, disable, disable, disable, disable, enable, enable, enable, enable, enable, enable, findEncoding, findSuperTypes, findSuperTypes, getSize, hasMatchingMediaTypeForReading, hasMatchingMediaTypeForWriting, isEnabled, isReadable, isWriteable, locateMapper, readFrom, removeUntouchable, setAnnotationsToUse, setDefaultReadView, setDefaultView, setDefaultWriteView, setMapper, writeTo`

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

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

- - ### Field Detail

    - #### BASIC_ANNOTATIONS

          public static final Annotations[] BASIC_ANNOTATIONS

      Default annotation sets to use, if not explicitly defined during construction: only Jackson annotations are used for the base class. Sub-classes can use other settings.

    - #### _providers

          @Context
          protected javax.ws.rs.ext.Providers _providers

      Injectable context object used to locate configured instance of `XmlMapper` to use for actual serialization.

  - ### Constructor Detail

    - #### JacksonXMLProvider

          public JacksonXMLProvider()

      Default constructor, usually used when provider is automatically configured to be used with JAX-RS implementation.

    - #### JacksonXMLProvider

          public JacksonXMLProvider(Annotations... annotationsToUse)

      Parameters:
        `annotationsToUse` - Annotation set(s) to use for configuring data binding

    - #### JacksonXMLProvider

          public JacksonXMLProvider(XmlMapper mapper)

    - #### JacksonXMLProvider

          public JacksonXMLProvider(XmlMapper mapper,
                            Annotations[] annotationsToUse)

      Constructor to use when a custom mapper (usually components like serializer/deserializer factories that have been configured) is to be used.
      Parameters:
        `annotationsToUse` - Sets of annotations (Jackson, JAXB) that provider should support

  - ### Method Detail

    - #### version

          public com.fasterxml.jackson.core.Version version()

      Method that will return version information stored in and read from jar that contains this class.

    - #### _configForReading

          protected XMLEndpointConfig _configForReading(com.fasterxml.jackson.databind.ObjectReader reader,
                                            Annotation[] annotations)

      Specified by:
        `_configForReading` in class `ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>`

    - #### _configForWriting

          protected XMLEndpointConfig _configForWriting(com.fasterxml.jackson.databind.ObjectWriter writer,
                                            Annotation[] annotations)

      Specified by:
        `_configForWriting` in class `ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>`

    - #### hasMatchingMediaType

          protected boolean hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)

      Helper method used to check whether given media type is XML type or sub type. Current implementation essentially checks to see whether `MediaType.getSubtype()` returns "xml" or something ending with "+xml".
      Specified by:
        `hasMatchingMediaType` in class `ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>`

    - #### _locateMapperViaProvider

          public XmlMapper _locateMapperViaProvider(Class<?> type,
                                           javax.ws.rs.core.MediaType mediaType)

      Method called to locate `XmlMapper` to use for serialization and deserialization. If an instance has been explicitly defined by `ProviderBase.setMapper(MAPPER)` (or non-null instance passed in constructor), that will be used. If not, will try to locate it using standard JAX-RS `ContextResolver` mechanism, if it has been properly configured to access it (by JAX-RS runtime). Finally, if no mapper is found, will return a default unconfigured `ObjectMapper` instance (one constructed with default constructor and not modified in any way)
      Specified by:
        `_locateMapperViaProvider` in class `ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>`
      Parameters:
        `type` - Class of object being serialized or deserialized; not checked at this point, since it is assumed that unprocessable classes have been already weeded out, but will be passed to `ContextResolver` as is.
        `mediaType` - Declared media type for the instance to process: not used by this method, but will be passed to `ContextResolver` as is.

    - #### _createParser

          protected com.fasterxml.jackson.core.JsonParser _createParser(com.fasterxml.jackson.databind.ObjectReader reader,
                                                            InputStream rawStream)
                                                                 throws IOException

      Description copied from class: `ProviderBase`
      Overridable helper method called to create a `JsonParser` for reading contents of given raw `InputStream`. May return null to indicate that Stream is empty; that is, contains no content.
      Overrides:
        `_createParser` in class `ProviderBase<JacksonXMLProvider,XmlMapper,XMLEndpointConfig,XMLMapperConfigurator>`
      Throws:
        `IOException`

Copyright © 2017 FasterXML. All rights reserved.