Author: veithen
Date: Thu May 21 19:33:56 2009
New Revision: 777229
URL: http://svn.apache.org/viewvc?rev=777229&view=rev
Log:
Added proper documentation for the IS_DATA_HANDLERS_AWARE extension.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMConstants.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMConstants.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMConstants.java?rev=777229&r1=777228&r2=777229&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMConstants.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMConstants.java
Thu May 21 19:33:56 2009
@@ -57,12 +57,33 @@
static final String XMLNS_PREFIX =
"xml";
+
+ /**
+ * {...@link javax.xml.stream.XMLStreamReader} property used to check if a
given
+ * {...@link javax.xml.stream.XMLStreamConstants#CHARACTERS} event
represents
+ * base64 encoded binary data exposed as a {...@link
javax.activation.DataHandler}.
+ *
+ * @see org.apache.axiom.om.impl.builder.StAXOMBuilder
+ */
String IS_BINARY = "Axiom.IsBinary";
+
+ /**
+ * {...@link javax.xml.stream.XMLStreamReader} property used to retrieve
the
+ * {...@link javax.activation.DataHandler} for a
+ * {...@link javax.xml.stream.XMLStreamConstants#CHARACTERS} event
representing
+ * base64 encoded binary data.
+ *
+ * @see org.apache.axiom.om.impl.builder.StAXOMBuilder
+ */
String DATA_HANDLER = "Axiom.DataHandler";
- // Indicates if the xmlstream reader is capable of handling data handlers.
- // Thus it is an immutable property and will either be true of false for
the
- // lifetime of that parser. @see OMStaxWrapper for an example
+ /**
+ * {...@link javax.xml.stream.XMLStreamReader} property indicating that the
+ * reader is capable of exposing base64 encoded binary content as
+ * {...@link javax.activation.DataHandler} objects.
+ *
+ * @see org.apache.axiom.om.impl.builder.StAXOMBuilder
+ */
String IS_DATA_HANDLERS_AWARE = "IsDatahandlersAwareParsing";
/** No its not a mistake. This is the default nsURI of the default
namespace of a node */
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?rev=777229&r1=777228&r2=777229&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
Thu May 21 19:33:56 2009
@@ -46,6 +46,55 @@
/**
* StAX based builder that produces a pure XML infoset compliant object model.
+ *
+ * <h3>XMLStreamReader extensions for optimized base64 handling</h3>
+ *
+ * <p>This class supports {...@link XMLStreamReader} instances that expose
base64 encoded binary
+ * content as {...@link javax.activation.DataHandler} objects. For this to
work, the
+ * {...@link XMLStreamReader} must conform to the following requirements:</p>
+ * <ol>
+ * <li>{...@link XMLStreamReader#getProperty(String)} must return {...@link
Boolean#TRUE}
+ * for the property identified by
+ * {...@link org.apache.axiom.om.OMConstants#IS_DATA_HANDLERS_AWARE},
regardless of
+ * the current event. The property is assumed to be immutable and its
value must
+ * not change during the lifetime of the {...@link XMLStreamReader}
implementation.</li>
+ * <li><p>If the {...@link XMLStreamReader} wishes to expose base64 encoded
content using
+ * a {...@link javax.activation.DataHandler} object, it must do so using
a single
+ * {...@link XMLStreamConstants#CHARACTERS} event.</p>
+ * <p>To maintain compatibility with consumers that are unaware of the
extensions
+ * described here, the implementation should make sure that
+ * {...@link XMLStreamReader#getText()}, {...@link
XMLStreamReader#getTextStart()},
+ * {...@link XMLStreamReader#getTextLength()}, {...@link
XMLStreamReader#getTextCharacters()},
+ * {...@link XMLStreamReader#getTextCharacters(int, char[], int, int)}
and
+ * {...@link XMLStreamReader#getElementText()} behave as expected for
this type of event,
+ * i.e. return the base64 representation of the binary content.</p></li>
+ * <li>{...@link XMLStreamReader#getProperty(String)} must return {...@link
Boolean#TRUE}
+ * for the property identified by
+ * {...@link org.apache.axiom.om.OMConstants#IS_BINARY} if the current
event is a
+ * {...@link XMLStreamConstants#CHARACTERS} event representing base64
encoded binary
+ * content and for which a {...@link javax.activation.DataHandler} is
available.
+ * For all other events, the returned value must be {...@link
Boolean#FALSE}.</li>
+ * <li><p>If for a given event, the implementation returned {...@link
Boolean#TRUE} for the
+ * {...@link org.apache.axiom.om.OMConstants#IS_BINARY} property, then a
call to
+ * {...@link XMLStreamReader#getProperty(String)} with argument
+ * {...@link org.apache.axiom.om.OMConstants#DATA_HANDLER} must return
the
+ * corresponding {...@link javax.activation.DataHandler} object.</p>
+ * <p>The {...@link org.apache.axiom.om.OMConstants#DATA_HANDLER}
property is undefined
+ * for any other type of event. This implies that the consumer of the
+ * {...@link XMLStreamReader} must check the {...@link
org.apache.axiom.om.OMConstants#IS_BINARY}
+ * property before retrieving the {...@link
org.apache.axiom.om.OMConstants#DATA_HANDLER}
+ * property.</p></li>
+ * </ol>
+ * <p>The extension described will typically be implemented by {...@link
XMLStreamReader} instances
+ * provided by databinding frameworks or {...@link XMLStreamReader} proxies
that enrich a stream of
+ * StAX events with binary data existing outside of the XML document. Another
example is
+ * {...@link org.apache.axiom.om.impl.OMStAXWrapper}.</p>
+ * <p>One may ask why this extension is defined using {...@link
XMLStreamReader} properties and not
+ * simply as an extension interface that the reader may implement. The reason
is that the property
+ * based approach continues to work if the {...@link XMLStreamReader}
implementing the extension
+ * is accessed through a proxy implementing the {...@link XMLStreamReader}
interface but unaware
+ * of the extension, at least if the proxy correctly delegates calls to the
+ * {...@link XMLStreamReader#getProperty(String)} method.</p>
*/
public class StAXOMBuilder extends StAXBuilder {
/** Field document */