org.jboss.resteasy.plugins.providers.jaxb
Class JAXBXmlTypeProvider

java.lang.Object
  extended by org.jboss.resteasy.plugins.providers.AbstractEntityProvider<T>
      extended by org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider<java.lang.Object>
          extended by org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider
All Implemented Interfaces:
MessageBodyReader<java.lang.Object>, MessageBodyWriter<java.lang.Object>

@Provider
public class JAXBXmlTypeProvider
extends AbstractJAXBProvider<java.lang.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 createContact(Contact value);

Version:
$Revision:$
Author:
Ryan J. McDonough

Field Summary
protected static java.lang.String OBJECT_FACTORY_NAME
           
 
Fields inherited from class org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider
providers
 
Constructor Summary
JAXBXmlTypeProvider()
           
 
Method Summary
static java.lang.Object findObjectFactory(java.lang.Class<?> type)
          Attempts to locate XmlRegistry for the XML type.
protected  boolean isReadWritable(java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, MediaType mediaType)
          FIXME Comment this
 java.lang.Object readFrom(java.lang.Class<java.lang.Object> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, MediaType mediaType, MultivaluedMap<java.lang.String,java.lang.String> httpHeaders, java.io.InputStream entityStream)
          Read a type from the InputStream.
static javax.xml.bind.JAXBElement<?> wrapInJAXBElement(java.lang.Object t, java.lang.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(java.lang.Object t, java.lang.Class<?> type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations, MediaType mediaType, MultivaluedMap<java.lang.String,java.lang.Object> httpHeaders, java.io.OutputStream entityStream)
          Write a type to an HTTP response.
 
Methods inherited from class org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider
findJAXBContext, getCharset, getMarshaller, isReadable, isWriteable
 
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
 

Field Detail

OBJECT_FACTORY_NAME

protected static final java.lang.String OBJECT_FACTORY_NAME
See Also:
Constant Field Values
Constructor Detail

JAXBXmlTypeProvider

public JAXBXmlTypeProvider()
Method Detail

writeTo

public void writeTo(java.lang.Object t,
                    java.lang.Class<?> type,
                    java.lang.reflect.Type genericType,
                    java.lang.annotation.Annotation[] annotations,
                    MediaType mediaType,
                    MultivaluedMap<java.lang.String,java.lang.Object> httpHeaders,
                    java.io.OutputStream entityStream)
             throws java.io.IOException
Description copied from interface: MessageBodyWriter
Write a type to an HTTP response. The response header map is mutable but any changes must be made before writing to the output stream since the headers will be flushed prior to writing the response body.

Specified by:
writeTo in interface MessageBodyWriter<java.lang.Object>
Overrides:
writeTo in class AbstractJAXBProvider<java.lang.Object>
Parameters:
t - the instance to write.
type - the class of object that is to be written.
genericType - the type of object to be written, obtained either by reflection of a resource method return type or by inspection of the returned instance. GenericEntity provides a way to specify this information at runtime.
annotations - an array of the annotations on the resource method that returns the object.
mediaType - the media type of the HTTP entity.
httpHeaders - a mutable map of the HTTP response headers.
entityStream - the OutputStream for the HTTP entity. The implementation should not close the output stream.
Throws:
java.io.IOException - if an IO error arises

readFrom

public java.lang.Object readFrom(java.lang.Class<java.lang.Object> type,
                                 java.lang.reflect.Type genericType,
                                 java.lang.annotation.Annotation[] annotations,
                                 MediaType mediaType,
                                 MultivaluedMap<java.lang.String,java.lang.String> httpHeaders,
                                 java.io.InputStream entityStream)
                          throws java.io.IOException
Description copied from interface: MessageBodyReader
Read a type from the InputStream.

Specified by:
readFrom in interface MessageBodyReader<java.lang.Object>
Overrides:
readFrom in class AbstractJAXBProvider<java.lang.Object>
Parameters:
type - the type that is to be read from the entity stream.
genericType - the type of object to be produced. E.g. if the message body is to be converted into a method parameter, this will be the formal type of the method parameter as returned by Class.getGenericParameterTypes.
annotations - an array of the annotations on the declaration of the artifact that will be initialized with the produced instance. E.g. if the message body is to be converted into a method parameter, this will be the annotations on that parameter returned by Class.getParameterAnnotations.
mediaType - the media type of the HTTP entity.
httpHeaders - the read-only HTTP headers associated with HTTP entity.
entityStream - the InputStream of the HTTP entity. The caller is responsible for ensuring that the input stream ends when the entity has been consumed. The implementation should not close the input stream.
Returns:
the type that was read from the stream.
Throws:
java.io.IOException - if an IO error arises

isReadWritable

protected boolean isReadWritable(java.lang.Class<?> type,
                                 java.lang.reflect.Type genericType,
                                 java.lang.annotation.Annotation[] annotations,
                                 MediaType mediaType)
Description copied from class: AbstractJAXBProvider
FIXME Comment this

Specified by:
isReadWritable in class AbstractJAXBProvider<java.lang.Object>
Returns:

findObjectFactory

public static java.lang.Object findObjectFactory(java.lang.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:
t -
type -
Returns:

wrapInJAXBElement

public static javax.xml.bind.JAXBElement<?> wrapInJAXBElement(java.lang.Object t,
                                                              java.lang.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 -
type -
Returns:


Copyright © 2009. All Rights Reserved.