org.apache.axiom.om.ds.jaxb
Class JAXBOMDataSource

java.lang.Object
  extended by org.apache.axiom.om.ds.AbstractOMDataSource
      extended by org.apache.axiom.om.ds.AbstractPushOMDataSource
          extended by org.apache.axiom.om.ds.jaxb.JAXBOMDataSource
All Implemented Interfaces:
OMDataSource, OMDataSourceExt, QNameAwareOMDataSource

public class JAXBOMDataSource
extends AbstractPushOMDataSource
implements QNameAwareOMDataSource

OMDataSource backed by a JAXB object. This class can be used both for plain JAXB objects and for JAXBElement instances. It implements QNameAwareOMDataSource so that it can be used with OMFactory.createOMElement(OMDataSource), i.e. it is not necessary to supply the QName during construction of the OMSourcedElement. It also has full support for XOP/MTOM. It is implemented as a push-style OMDataSource so that an OMSourcedElement backed by an instance of this class can be expanded in an efficient way (including the case where the JAXB object contains base64 binary data represented as DataHandler instances or byte arrays).

The JAXB object encapsulated by an instance of this class can be retrieved using OMDataSourceExt.getObject(). Note that modifying the JAXB object after passing it to the constructor may result in unexpected behavior and should be avoided.

Instances of this class are non destructive, in the sense defined by OMDataSourceExt.isDestructiveWrite().


Field Summary
 
Fields inherited from interface org.apache.axiom.om.OMDataSourceExt
LOSSY_PREFIX
 
Constructor Summary
JAXBOMDataSource(JAXBContext context, Object object)
          Constructor.
 
Method Summary
 OMDataSourceExt copy()
          Create a copy of the data source.
 String getLocalName()
          Get the local name of the element represented by this data source.
 String getNamespaceURI()
          Get the namespace URI of the element represented by this data source.
 Object getObject()
          Get the object that backs this data source.
 String getPrefix()
          Get the namespace prefix of the element represented by this data source.
 boolean isDestructiveWrite()
          Returns true if writing the backing object is destructive.
 void serialize(XMLStreamWriter writer)
          Serializes element data directly to StAX writer.
 
Methods inherited from class org.apache.axiom.om.ds.AbstractPushOMDataSource
getReader, isDestructiveRead
 
Methods inherited from class org.apache.axiom.om.ds.AbstractOMDataSource
close, getProperty, getXMLBytes, getXMLInputStream, hasProperty, serialize, serialize, setProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.axiom.om.OMDataSource
getReader, serialize, serialize
 

Constructor Detail

JAXBOMDataSource

public JAXBOMDataSource(JAXBContext context,
                        Object object)
Constructor.

Parameters:
context - the JAXB context to which the object is known
object - the JAXB object; this may be a plain Java bean or a JAXBElement
Method Detail

isDestructiveWrite

public boolean isDestructiveWrite()
Description copied from interface: OMDataSourceExt
Returns true if writing the backing object is destructive. An example of an object with a destructive write is an InputStream. The owning OMSourcedElement uses this information to detemine if OM tree expansion is needed when writing the OMDataSourceExt.

Specified by:
isDestructiveWrite in interface OMDataSourceExt
Returns:
boolean

serialize

public void serialize(XMLStreamWriter writer)
               throws XMLStreamException
Description copied from interface: OMDataSource
Serializes element data directly to StAX writer.

The implementation of this method must satisfy the following requirements:

On the other hand, the caller of this method (typically an OMSourcedElement instance) must ensure that the following requirements are satisfied:

It is assumed that this method consumes the content (i.e. destroys the backing object) unless the data source also implements OMDataSourceExt and OMDataSourceExt.isDestructiveWrite() returns false.

Specified by:
serialize in interface OMDataSource
Parameters:
writer - destination writer
Throws:
XMLStreamException

getLocalName

public String getLocalName()
Description copied from interface: QNameAwareOMDataSource
Get the local name of the element represented by this data source.

Specified by:
getLocalName in interface QNameAwareOMDataSource
Returns:
the local name of the element or null if the local name is not known

getNamespaceURI

public String getNamespaceURI()
Description copied from interface: QNameAwareOMDataSource
Get the namespace URI of the element represented by this data source.

Specified by:
getNamespaceURI in interface QNameAwareOMDataSource
Returns:
the namespace URI of the element, the empty string if the element has no namespace or null if the namespace URI is not known

getPrefix

public String getPrefix()
Description copied from interface: QNameAwareOMDataSource
Get the namespace prefix of the element represented by this data source.

Specified by:
getPrefix in interface QNameAwareOMDataSource
Returns:
the prefix of the element, the empty string if the element has no prefix or null if the prefix is not known; the implementation is expected to return an empty string if QNameAwareOMDataSource.getNamespaceURI() returns an empty string (because an element without namespace must not have a prefix)

getObject

public Object getObject()
Description copied from interface: OMDataSourceExt
Get the object that backs this data source. Application code should in general not call this method directly, but use OMSourcedElement.getObject(Class) instead.

Data sources that support non destructive read/write should return the object from which the XML is produced. Data sources with destructive read/write should return a non null value only if the backing object has not been consumed yet (even partially).

Specified by:
getObject in interface OMDataSourceExt
Overrides:
getObject in class AbstractOMDataSource
Returns:
the backing object, or null if the data source has no backing object or if the backing object can't be accessed in a safe way

copy

public OMDataSourceExt copy()
Description copied from interface: OMDataSourceExt
Create a copy of the data source. This method is used by OMInformationItem.clone(OMCloneOptions) when the OMCloneOptions.isCopyOMDataSources() option is enabled. If the data source is immutable and stateless, then it may return a reference to itself instead of creating a new data source instance.

Specified by:
copy in interface OMDataSourceExt
Overrides:
copy in class AbstractOMDataSource
Returns:
the copy of the data source, or null if the data source can't be copied (e.g. because it is destructive)


Copyright © 2004-2012 The Apache Software Foundation. All Rights Reserved.