|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.apache.axiom.om.ds.OMDataSourceExtBase
org.apache.axiom.om.ds.ParserInputStreamDataSource
public class ParserInputStreamDataSource
A DataSource that is backed by an InputStream (read from a parser). The Data in this Data source owns the payload inputStream.
| Nested Class Summary | |
|---|---|
class |
ParserInputStreamDataSource.Data
|
| Field Summary |
|---|
| Fields inherited from interface org.apache.axiom.om.OMDataSourceExt |
|---|
LOSSY_PREFIX |
| Constructor Summary | |
|---|---|
ParserInputStreamDataSource(InputStream payload,
String encoding)
This is the constructor that is normally called. |
|
ParserInputStreamDataSource(InputStream payload,
String encoding,
int behavior)
This constructor is used to test the different Behavior settings. |
|
| Method Summary | |
|---|---|
void |
close()
Close the DataSource and free its resources. |
OMDataSourceExt |
copy()
Return a InputStreamDataSource backed by a ByteArrayInputStream |
Object |
getObject()
Get the object that backs this data source. |
XMLStreamReader |
getReader()
Get parser for element data. |
byte[] |
getXMLBytes(String encoding)
Returns a byte[] representing the xml data |
InputStream |
getXMLInputStream(String encoding)
Returns a InputStream representing the xml data |
boolean |
isDestructiveRead()
Returns true if reading the backing object is destructive. |
boolean |
isDestructiveWrite()
Returns true if writing the backing object is destructive. |
int |
numReads()
|
void |
serialize(OutputStream output,
OMOutputFormat format)
Serializes element data directly to stream. |
void |
serialize(XMLStreamWriter xmlWriter)
Serializes element data directly to StAX writer. |
| Methods inherited from class org.apache.axiom.om.ds.OMDataSourceExtBase |
|---|
getProperty, hasProperty, serialize, setProperty |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public ParserInputStreamDataSource(InputStream payload,
String encoding)
payload - InputStreamencoding -
public ParserInputStreamDataSource(InputStream payload,
String encoding,
int behavior)
payload - encoding - behavior - | Method Detail |
|---|
public void serialize(OutputStream output,
OMOutputFormat format)
throws XMLStreamException
OMDataSource
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.
serialize in interface OMDataSourceserialize in class OMDataSourceExtBaseoutput - destination stream for element XML textformat - Output format information. The implementation must use this information to choose
the correct character set encoding when writing to the output stream. This
parameter must not be null.
XMLStreamException
public void serialize(XMLStreamWriter xmlWriter)
throws XMLStreamException
OMDataSourceThe implementation of this method must satisfy the following requirements:
XMLStreamWriter.writeStartDocument(),
XMLStreamWriter.writeStartDocument(String),
XMLStreamWriter.writeStartDocument(String, String) or
XMLStreamWriter.writeEndElement().
XMLStreamWriter.writeStartElement(String) or
XMLStreamWriter.writeEmptyElement(String). On the other hand, it MAY use the
namespace unaware XMLStreamWriter.writeAttribute(String, String) method, provided
that the specified name is an NCName.
XMLStreamWriter.writeNamespace(String, String) and
XMLStreamWriter.writeDefaultNamespace(String). It MUST NOT assume that the
XMLStreamWriter performs any kind of namespace repairing (although that may be the
case).
XMLStreamWriter.setPrefix(String, String)
and XMLStreamWriter.setDefaultNamespace(String) to track the namespace declarations
it generates, so that the namespace context maintained by the XMLStreamWriter
accurately reflects the namespace context in the output document. However, it MUST NOT call
these methods before the start of the root element or after the end of the root element.
XMLStreamWriter.getPrefix(String) and XMLStreamWriter.getNamespaceContext()).
This means that the implementation MUST NOT assume that the empty prefix is bound to the
empty namespace URI. Therefore if the implementation outputs elements that have no namespace,
it MUST generate namespace declarations of the form xmlns="" in the appropriate
locations. In addition it MAY use the namespace context information to minimize the number of
generated namespace declarations (by reusing already bound prefixes).
XMLStreamWriterUtils.writeDataHandler(XMLStreamWriter, DataHandler, String, boolean)
or
XMLStreamWriterUtils.writeDataHandler(XMLStreamWriter, DataHandlerProvider, String, boolean)
to write the data to the stream. If this is not possible (e.g. because the content is
produced by a third party library that is not aware of these APIs), then the implementation
MUST use the following approach:
XMLStreamWriter is an MTOMXMLStreamWriter, then the implementation
MAY use MTOMXMLStreamWriter.prepareDataHandler(DataHandler) and generate the
necessary xop:Include elements itself. In this case, the implementation MAY use
MTOMXMLStreamWriter.isOptimized() to check if XOP/MTOM is enabled at all.
Alternatively, instead of handling MTOMXMLStreamWriter in a special way, the
implementation MAY use the approach described in the next item. This works because
MTOMXMLStreamWriter exposes the DataHandlerWriter extension. However, this
causes a slight overhead because the stream is first XOP decoded and then reencoded again.
XMLStreamWriter exposes the DataHandlerWriter extension, but is
not an MTOMXMLStreamWriter (or is an MTOMXMLStreamWriter, but the
implementation doesn't implement the approach described in the previous item), then the
implementation MUST wrap the XMLStreamWriter in an XOPDecodingStreamWriter
and write xop:Include elements to that wrapper, so that they can be translated into
appropriate calls to the DataHandlerWriter. This requirement is important for two
reasons:
OMSerializable.serialize(XMLStreamWriter, boolean) method.
OMDataSource is push-only (see AbstractPushOMDataSource), then it
enables OMSourcedElement to create OMText nodes for the binary content in an
efficient way.
XMLStreamWriter.writeCharacters(String) or
XMLStreamWriter.writeCharacters(char[], int, int) to write the base64 encoded data to
the stream.
On the other hand, the caller of this method (typically an OMSourcedElement instance)
must ensure that the following requirements are satisfied:
XMLStreamWriter.getPrefix(String)
and XMLStreamWriter.getNamespaceContext() MUST accurately reflect the actual
namespace context at the location in the output document where the root element is
serialized. Note that this requirement may be relaxed if the caller implements some form of
namespace repairing.
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.
serialize in interface OMDataSourceserialize in class OMDataSourceExtBasexmlWriter - destination writer
XMLStreamException
public XMLStreamReader getReader()
throws XMLStreamException
OMDataSource
It is assumed that this method consumed the content (i.e. destroys the backing object) unless
the data source also implements OMDataSourceExt and
OMDataSourceExt.isDestructiveRead() returns false.
XMLStreamException
public InputStream getXMLInputStream(String encoding)
throws UnsupportedEncodingException
OMDataSourceExt
getXMLInputStream in interface OMDataSourceExtgetXMLInputStream in class OMDataSourceExtBaseencoding - String encoding of InputStream
UnsupportedEncodingExceptionpublic int numReads()
public Object getObject()
OMDataSourceExtOMSourcedElement.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).
null if the data source has no backing object or
if the backing object can't be accessed in a safe waypublic boolean isDestructiveRead()
OMDataSourceExt
public boolean isDestructiveWrite()
OMDataSourceExt
public byte[] getXMLBytes(String encoding)
OMDataSourceExt
encoding - String encoding of InputStream
OMDataSourceExt.getXMLInputStream(String)public void close()
OMDataSourceExt
public OMDataSourceExt copy()
null if the data source can't be copied
(e.g. because it is destructive)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||