[prev in list] [next in list] [prev in thread] [next in thread]
List: xmlrpc-user
Subject: svn commit: r1028486 - in
From: veithen () apache ! org
Date: 2010-10-28 21:22:44
Message-ID: 20101028212244.9C1852388A41 () eris ! apache ! org
[Download RAW message or body]
Author: veithen
Date: Thu Oct 28 21:22:44 2010
New Revision: 1028486
URL: http://svn.apache.org/viewvc?rev=1028486&view=rev
Log:
Merged the methods of the DataHandlerReaderUtils class into XMLStreamReaderUtils. \
This fixes the mistake made in r1026835, which put the class into the wrong package \
(the utility methods are related to StAX, not to JAF). It also solves the issue of \
the duplicate getDataHandlerReader (which existed both in DataHandlerReaderUtils and \
XMLStreamReaderUtils).
Removed:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/activation/DataHandlerReaderUtils.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtils.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPUtils.java
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java \
Thu Oct 28 21:22:44 2010 @@ -54,7 +54,6 @@ import org.apache.axiom.om.OMXMLParserWr
import org.apache.axiom.om.impl.OMNavigator;
import org.apache.axiom.om.impl.builder.StAXBuilder;
import org.apache.axiom.om.impl.exception.OMStreamingException;
-import org.apache.axiom.util.activation.DataHandlerReaderUtils;
import org.apache.axiom.util.namespace.MapBasedNamespaceContext;
import org.apache.axiom.util.stax.AbstractXMLStreamReader;
import org.apache.axiom.util.stax.DummyLocation;
@@ -1035,7 +1034,7 @@ class SwitchingWrapper extends AbstractX
* @throws IllegalArgumentException
*/
public Object getProperty(String s) throws IllegalArgumentException {
- Object value = DataHandlerReaderUtils.processGetProperty(this, s);
+ Object value = XMLStreamReaderUtils.processGetProperty(this, s);
if (value != null) {
return value;
}
@@ -1438,7 +1437,7 @@ class SwitchingWrapper extends AbstractX
public void setParser(XMLStreamReader parser) {
this.parser = parser;
dataHandlerReader =
- parser == null ? null : \
DataHandlerReaderUtils.getDataHandlerReader(parser); + parser == null \
? null : XMLStreamReaderUtils.getDataHandlerReader(parser); }
private Map getAllNamespaces(OMNode contextNode) {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtils.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtils.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtils.java \
Thu Oct 28 21:22:44 2010 @@ -22,18 +22,19 @@ package org.apache.axiom.om.impl.builder
import javax.xml.stream.XMLStreamReader;
import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
/**
- * @deprecated Use {@link org.apache.axiom.util.activation.DataHandlerReaderUtils} \
instead. + * @deprecated Use the corresponding methods in {@link \
XMLStreamReaderUtils} instead.
*/
public class DataHandlerReaderUtils {
private DataHandlerReaderUtils() {}
public static DataHandlerReader getDataHandlerReader(final XMLStreamReader \
reader) {
- return org.apache.axiom.util.activation.DataHandlerReaderUtils.getDataHandlerReader(reader);
+ return XMLStreamReaderUtils.getDataHandlerReader(reader);
}
public static Object processGetProperty(DataHandlerReader extension, String \
propertyName) {
- return org.apache.axiom.util.activation.DataHandlerReaderUtils.processGetProperty(extension, \
propertyName); + return XMLStreamReaderUtils.processGetProperty(extension, \
propertyName); }
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java \
Thu Oct 28 21:22:44 2010 @@ -36,7 +36,6 @@ import org.apache.axiom.om.impl.OMContai
import org.apache.axiom.om.impl.OMNodeEx;
import org.apache.axiom.om.impl.util.OMSerializerUtil;
import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.util.activation.DataHandlerReaderUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java \
Thu Oct 28 21:22:44 2010 @@ -25,7 +25,7 @@ import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMSerializer;
import org.apache.axiom.om.impl.OMStAXWrapper;
import org.apache.axiom.om.impl.util.OMSerializerUtil;
-import org.apache.axiom.util.activation.DataHandlerReaderUtils;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -84,7 +84,7 @@ public class StreamingOMSerializer imple
public void serialize(XMLStreamReader reader, XMLStreamWriter writer, boolean \
startAtNext) throws XMLStreamException {
- dataHandlerReader = DataHandlerReaderUtils.getDataHandlerReader(reader);
+ dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(reader);
dataHandlerWriter = XMLStreamWriterUtils.getDataHandlerWriter(writer);
if (reader instanceof OMStAXWrapper) {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java \
Thu Oct 28 21:22:44 2010 @@ -30,6 +30,7 @@ import javax.xml.stream.XMLStreamReader;
import org.apache.axiom.ext.stax.CharacterDataReader;
import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
import org.apache.axiom.util.activation.EmptyDataSource;
import org.apache.axiom.util.base64.Base64DecodingOutputStreamWriter;
@@ -40,27 +41,165 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
- * Contains utility methods to work with {@link XMLStreamReader} objects.
+ * Contains utility methods to work with {@link XMLStreamReader} objects, including \
the extension + * defined by {@link DataHandlerReader}. In addition to {@link \
DataHandlerReader} support, this + * class also provides support for the legacy \
extension mechanism described below. + *
+ * <h3>Legacy XMLStreamReader extensions for optimized base64 handling</h3>
+ *
+ * <p>
+ * {@link XMLStreamReader} instances supporting the legacy extension 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>
+ * The extension mechanism described here has been deprecated mainly because it \
doesn't support + * deferred loading of the binary content.
*/
public class XMLStreamReaderUtils {
+ // Legacy property names; should be removed in Axiom 1.3
+ private static final String IS_BINARY = "Axiom.IsBinary";
+ private static final String DATA_HANDLER = "Axiom.DataHandler";
+ private static final String IS_DATA_HANDLERS_AWARE = \
"IsDatahandlersAwareParsing";
private static Log log = LogFactory.getLog(XMLStreamReaderUtils.class);
-
+
+ private XMLStreamReaderUtils() {}
+
/**
- * Get the {@link DataHandlerReader} extension from a given {@link \
XMLStreamReader}. + * Get the {@link DataHandlerReader} extension for a given \
{@link XMLStreamReader}, if + * available. If the {@link XMLStreamReader} only \
supports the legacy extension (as described + * above), then this method will \
return a compatibility wrapper. Note that this wrapper doesn't + * support \
deferred loading of the binary content.
*
* @param reader
- * the stream for which the method should return the {@link \
DataHandlerReader}
- * extension
- * @return the reference to the {@link DataHandlerReader} extension, or \
<code>null</code> if
- * the reader doesn't implement the extension
+ * the stream reader to get the {@link DataHandlerReader} extension \
from + * @return the implementation of the extension, or <code>null</code> if the
+ * {@link XMLStreamReader} doesn't expose base64 encoded binary content \
as + * {@link DataHandler} objects.
*/
- public static DataHandlerReader getDataHandlerReader(XMLStreamReader reader) {
+ public static DataHandlerReader getDataHandlerReader(final XMLStreamReader \
reader) { + try {
+ DataHandlerReader dhr = (DataHandlerReader)reader.getProperty(
+ DataHandlerReader.PROPERTY);
+ if (dhr != null) {
+ return dhr;
+ }
+ } catch (IllegalArgumentException ex) {
+ // Just continue
+ }
+ Boolean isDataHandlerAware;
try {
- return (DataHandlerReader)reader.getProperty(DataHandlerReader.PROPERTY);
+ isDataHandlerAware = \
(Boolean)reader.getProperty(IS_DATA_HANDLERS_AWARE); } catch \
(IllegalArgumentException ex) { return null;
}
+ if (isDataHandlerAware != null && isDataHandlerAware.booleanValue()) {
+ return new DataHandlerReader() {
+ public boolean isBinary() {
+ return ((Boolean)reader.getProperty(IS_BINARY)).booleanValue();
+ }
+
+ public boolean isOptimized() {
+ // This is compatible with the old StAXBuilder implementation
+ return true;
+ }
+
+ public boolean isDeferred() {
+ return false;
+ }
+
+ public String getContentID() {
+ return null;
+ }
+
+ public DataHandler getDataHandler() {
+ return (DataHandler)reader.getProperty(DATA_HANDLER);
+ }
+
+ public DataHandlerProvider getDataHandlerProvider() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Helper method to implement {@link XMLStreamReader#getProperty(String)}. This \
method + * processed the properties defined by {@link DataHandlerReader#PROPERTY} \
and the legacy + * extension mechanism (as described above). It can therefore be \
used to make a + * {@link XMLStreamReader} implementation compatible with code \
that expects it to implement this + * legacy extension.
+ *
+ * @param extension
+ * the reference to the {@link DataHandlerReader} extension for the
+ * {@link XMLStreamReader} implementation
+ * @param propertyName
+ * the name of the property, as passed to the
+ * {@link XMLStreamReader#getProperty(String)} method
+ * @return the property value as specified by the {@link DataHandlerReader} or \
legacy extension; + * <code>null</code> if the property is not specified \
by any of these two extensions + */
+ public static Object processGetProperty(DataHandlerReader extension, String \
propertyName) { + if (extension == null || propertyName == null) {
+ throw new IllegalArgumentException();
+ } else if (propertyName.equals(DataHandlerReader.PROPERTY)) {
+ return extension;
+ } else if (propertyName.equals(IS_DATA_HANDLERS_AWARE)) {
+ return Boolean.TRUE;
+ } else if (propertyName.equals(IS_BINARY)) {
+ return Boolean.valueOf(extension.isBinary());
+ } else if (propertyName.equals(DATA_HANDLER)) {
+ try {
+ return extension.getDataHandler();
+ } catch (XMLStreamException ex) {
+ throw new RuntimeException(ex);
+ }
+ } else {
+ return null;
+ }
}
/**
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axio \
m-api/src/main/java/org/apache/axiom/util/stax/xop/XOPUtils.java?rev=1028486&r1=1028485&r2=1028486&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPUtils.java \
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPUtils.java \
Thu Oct 28 21:22:44 2010 @@ -26,7 +26,7 @@ import java.net.URLDecoder;
import javax.activation.DataHandler;
import javax.xml.stream.XMLStreamReader;
-import org.apache.axiom.util.activation.DataHandlerReaderUtils;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
/**
* Contains utility methods related to XOP.
@@ -126,7 +126,7 @@ public class XOPUtils {
return new XOPEncodedStream(reader, (MimePartProvider)reader);
} else if (reader instanceof XOPDecodingStreamReader) {
return ((XOPDecodingStreamReader)reader).getXOPEncodedStream();
- } else if (DataHandlerReaderUtils.getDataHandlerReader(reader) != null) {
+ } else if (XMLStreamReaderUtils.getDataHandlerReader(reader) != null) {
XOPEncodingStreamReader wrapper = new XOPEncodingStreamReader(reader,
ContentIDGenerator.DEFAULT, OptimizationPolicy.ALL);
return new XOPEncodedStream(wrapper, wrapper);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic