[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