Package org.jboss.resteasy.plugins.providers.jaxb

## Class JAXBXmlTypeProvider

- java.lang.Object
- - org.jboss.resteasy.plugins.providers.AbstractEntityProvider<T>
  - - org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider<Object>
    - - org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider

- All Implemented Interfaces:
    `javax.ws.rs.ext.MessageBodyReader<Object>`, `javax.ws.rs.ext.MessageBodyWriter<Object>`, `AsyncBufferedMessageBodyWriter<Object>`, `AsyncMessageBodyWriter<Object>`
  Direct Known Subclasses:
    `FastinfoSetXmlTypeProvider`

      @Provider
      @Produces({"application/xml","application/*+xml","text/xml","text/*+xml"})
      @Consumes({"application/xml","application/*+xml","text/xml","text/*+xml"})
      public class JAXBXmlTypeProvider
      extends AbstractJAXBProvider<Object>

  A JAXB entity provider that handles classes without `XmlRootElement` annotation. Classes which have been generated by XJC will most likely not contain this annotation, In order for these classes to marshalled, they must be wrapped within a `JAXBElement` instance. This is typically accomplished by invoking a method on the class which serves as the `XmlRegistry` and is named ObjectFactory.

  This provider is selected when the class is annotated with an `XmlType` annotation and not an `XmlRootElement` annotation.

  This provider simplifies this task by attempting to locate the `XmlRegistry` for the target class. By default, a JAXB implementation will create a class called ObjectFactory and is located in the same package as the target class. When this class is located, it will contain a "create" method that takes the object instance as a parameter. For example, of the target type is called "Contact", then the ObjectFactory class will have a method:

  `public JAXBElement<Contact> createContact(Contact value);`
  Version:
    $Revision:$
  Author:
    Ryan J. McDonough

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected static String` | `OBJECT_FACTORY_NAME` |

    - ### Fields inherited from class org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider

      `providers`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JAXBXmlTypeProvider()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static Object` | `findObjectFactory​(Class<?> type)` | Attempts to locate `XmlRegistry` for the XML type.
    `protected boolean` | `isReadWritable​(Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)` |
    `Object` | `readFrom​(Class<Object> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<String,​String> httpHeaders, InputStream entityStream)` |
    `static JAXBElement<?>` | `wrapInJAXBElement​(Object t, Class<?> type)` | If this object is managed by an XmlRegistry, this method will invoke the registry and wrap the object in a JAXBElement so that it can be marshalled.
    `void` | `writeTo​(Object t, Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<String,​Object> httpHeaders, OutputStream entityStream)` |

    - ### Methods inherited from class org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider

      `decorateMarshaller, decorateUnmarshaller, findJAXBContext, getCharset, getMarshaller, isDisableDTDs, isDisableExternalEntities, isEnableSecureProcessingFeature, isReadable, isWriteable, needsSecurity, processWithSecureProcessing, setCharset, setDisableDTDs, setDisableExternalEntities, setEnableSecureProcessingFeature`

    - ### Methods inherited from class org.jboss.resteasy.plugins.providers.AbstractEntityProvider

      `getSize`

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

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

    - ### Methods inherited from interface org.jboss.resteasy.core.messagebody.AsyncBufferedMessageBodyWriter

      `asyncWriteTo`

    - ### Methods inherited from interface javax.ws.rs.ext.MessageBodyWriter

      `getSize`

- - ### Field Detail

    - #### OBJECT_FACTORY_NAME

          protected static final String OBJECT_FACTORY_NAME

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### JAXBXmlTypeProvider

          public JAXBXmlTypeProvider()

  - ### Method Detail

    - #### writeTo

          public void writeTo​(Object t,
                              Class<?> type,
                              Type genericType,
                              Annotation[] annotations,
                              javax.ws.rs.core.MediaType mediaType,
                              javax.ws.rs.core.MultivaluedMap<String,​Object> httpHeaders,
                              OutputStream entityStream)
                       throws IOException

      Specified by:
        `writeTo` in interface `javax.ws.rs.ext.MessageBodyWriter<Object>`
      Overrides:
        `writeTo` in class `AbstractJAXBProvider<Object>`
      Throws:
        `IOException`

    - #### readFrom

          public Object readFrom​(Class<Object> type,
                                 Type genericType,
                                 Annotation[] annotations,
                                 javax.ws.rs.core.MediaType mediaType,
                                 javax.ws.rs.core.MultivaluedMap<String,​String> httpHeaders,
                                 InputStream entityStream)
                          throws IOException

      Specified by:
        `readFrom` in interface `javax.ws.rs.ext.MessageBodyReader<Object>`
      Overrides:
        `readFrom` in class `AbstractJAXBProvider<Object>`
      Throws:
        `IOException`

    - #### isReadWritable

          protected boolean isReadWritable​(Class<?> type,
                                           Type genericType,
                                           Annotation[] annotations,
                                           javax.ws.rs.core.MediaType mediaType)

      Specified by:
        `isReadWritable` in class `AbstractJAXBProvider<Object>`

    - #### findObjectFactory

          public static Object findObjectFactory​(Class<?> type)

      Attempts to locate `XmlRegistry` for the XML type. Usually, a class named ObjectFactory is located in the same package as the type we're trying to marshall. This method simply locates this class and instantiates it if found.
      Parameters:
        `type` - type class
      Returns:
        object factory instance

    - #### wrapInJAXBElement

          public static JAXBElement<?> wrapInJAXBElement​(Object t,
                                                         Class<?> type)

      If this object is managed by an XmlRegistry, this method will invoke the registry and wrap the object in a JAXBElement so that it can be marshalled.
      Parameters:
        `t` - object to wrap
        `type` - type class
      Returns:
        jaxb element