You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2013/05/12 15:26:20 UTC

svn commit: r1481554 - in /webservices/axiom/trunk/modules: axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/ axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/ axiom-testsuite/src/main/java/org/apache/axiom/ts/soap1...

Author: veithen
Date: Sun May 12 13:26:19 2013
New Revision: 1481554

URL: http://svn.apache.org/r1481554
Log:
AXIOM-288: Fixed an issue with the DataHandlerReader extension.

Modified:
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/StreamSwitch.java
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/mtom/TestGetXMLStreamReaderMTOMEncoded.java

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/StreamSwitch.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/StreamSwitch.java?rev=1481554&r1=1481553&r2=1481554&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/StreamSwitch.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/StreamSwitch.java Sun May 12 13:26:19 2013
@@ -18,20 +18,36 @@
  */
 package org.apache.axiom.om.impl.common.serializer.pull;
 
+import javax.activation.DataHandler;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.util.StreamReaderDelegate;
 
+import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
 import org.apache.axiom.om.OMDataSource;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
 
-final class StreamSwitch extends StreamReaderDelegate {
+final class StreamSwitch extends StreamReaderDelegate implements DataHandlerReader {
     /**
      * Indicates if an OMSourcedElement with an OMDataSource should
      * be considered as an interior node or a leaf node.
      */
     private boolean isDataSourceALeaf;
 
+    /**
+     * The {@link DataHandlerReader} extension of the underlying parser, or <code>null</code>
+     * if the parser doesn't support this extension.
+     */
+    private DataHandlerReader dataHandlerReader;
+
+    public void setParent(XMLStreamReader reader) {
+        super.setParent(reader);
+        dataHandlerReader =
+                reader == null ? null : XMLStreamReaderUtils.getDataHandlerReader(reader);
+    }
+
     OMDataSource getDataSource() {
         XMLStreamReader parent = getParent();
         // Only SwitchingWrapper can produce OMDataSource "events"
@@ -107,4 +123,61 @@ final class StreamSwitch extends StreamR
             ///////////////////////////////////////////////////////////////
         }
     }
+
+    public Object getProperty(String name) {
+        Object value = XMLStreamReaderUtils.processGetProperty(this, name);
+        if (value != null) {
+            return value;
+        } else {
+            return super.getProperty(name);
+        }
+    }
+
+    public boolean isBinary() {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.isBinary();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isOptimized() {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.isOptimized();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public boolean isDeferred() {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.isDeferred();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getContentID() {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.getContentID();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public DataHandler getDataHandler() throws XMLStreamException {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.getDataHandler();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public DataHandlerProvider getDataHandlerProvider() {
+        if (dataHandlerReader != null) {
+            return dataHandlerReader.getDataHandlerProvider();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
 }

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java?rev=1481554&r1=1481553&r2=1481554&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java Sun May 12 13:26:19 2013
@@ -95,12 +95,6 @@ class SwitchingWrapper extends AbstractX
     private XMLStreamReader parser;
     
     /**
-     * The {@link DataHandlerReader} extension of the underlying parser, or <code>null</code>
-     * if the parser doesn't support this extension.
-     */
-    private DataHandlerReader dataHandlerReader;
-
-    /**
      * The root node, i.e. the node from which the {@link XMLStreamReader} has been requested.
      */
     private final OMContainer rootNode;
@@ -980,96 +974,48 @@ class SwitchingWrapper extends AbstractX
      */
 
     public boolean isBinary() {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.isBinary();
-            } else {
-                return false;
-            }
+        if (node instanceof OMText) {
+            return ((OMText)node).isBinary();
         } else {
-            if (node instanceof OMText) {
-                return ((OMText)node).isBinary();
-            } else {
-                return false;
-            }
+            return false;
         }
     }
 
     public boolean isOptimized() {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.isOptimized();
-            } else {
-                throw new IllegalStateException();
-            }
+        if (node instanceof OMText) {
+            return ((OMText)node).isOptimized();
         } else {
-            if (node instanceof OMText) {
-                return ((OMText)node).isOptimized();
-            } else {
-                throw new IllegalStateException();
-            }
+            throw new IllegalStateException();
         }
     }
 
     public boolean isDeferred() {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.isDeferred();
-            } else {
-                throw new IllegalStateException();
-            }
+        if (node instanceof OMText) {
+            // TODO: we should support deferred building of the DataHandler
+            return false;
         } else {
-            if (node instanceof OMText) {
-                // TODO: we should support deferred building of the DataHandler
-                return false;
-            } else {
-                throw new IllegalStateException();
-            }
+            throw new IllegalStateException();
         }
     }
 
     public String getContentID() {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.getContentID();
-            } else {
-                throw new IllegalStateException();
-            }
+        if (node instanceof OMText) {
+            return ((OMText)node).getContentID();
         } else {
-            if (node instanceof OMText) {
-                return ((OMText)node).getContentID();
-            } else {
-                throw new IllegalStateException();
-            }
+            throw new IllegalStateException();
         }
     }
 
     public DataHandler getDataHandler() throws XMLStreamException {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.getDataHandler();
-            } else {
-                throw new IllegalStateException();
-            }
+        if (node instanceof OMText) {
+            return (DataHandler)((OMText)node).getDataHandler();
         } else {
-            if (node instanceof OMText) {
-                return (DataHandler)((OMText)node).getDataHandler();
-            } else {
-                throw new IllegalStateException();
-            }
+            throw new IllegalStateException();
         }
     }
 
     public DataHandlerProvider getDataHandlerProvider() {
-        if (parser != null) {
-            if (dataHandlerReader != null) {
-                return dataHandlerReader.getDataHandlerProvider();
-            } else {
-                throw new IllegalStateException();
-            }
-        } else {
-            throw new IllegalStateException();
-        }
+        throw new IllegalStateException();
     }
 
     /*
@@ -1101,8 +1047,6 @@ class SwitchingWrapper extends AbstractX
 
     private void setParser(XMLStreamReader parser) {
         this.parser = parser;
-        dataHandlerReader =
-                parser == null ? null : XMLStreamReaderUtils.getDataHandlerReader(parser);
     }
 
     private Map getAllNamespaces(OMSerializable contextNode) {

Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java?rev=1481554&r1=1481553&r2=1481554&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java Sun May 12 13:26:19 2013
@@ -304,6 +304,7 @@ public class SOAPTestSuiteBuilder extend
         addTest(new org.apache.axiom.ts.soap12.header.TestExamineMustUnderstandHeaderBlocksWithParser(metaFactory));
         addTest(new org.apache.axiom.ts.soap12.header.TestGetHeaderBlocksWithNSURIWithParser(metaFactory));
         addTest(new org.apache.axiom.ts.soap12.header.TestGetHeadersToProcessWithParser(metaFactory));
-        addTest(new org.apache.axiom.ts.soap12.mtom.TestGetXMLStreamReaderMTOMEncoded(metaFactory));
+        addTest(new org.apache.axiom.ts.soap12.mtom.TestGetXMLStreamReaderMTOMEncoded(metaFactory, true));
+        addTest(new org.apache.axiom.ts.soap12.mtom.TestGetXMLStreamReaderMTOMEncoded(metaFactory, false));
     }
 }

Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/mtom/TestGetXMLStreamReaderMTOMEncoded.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/mtom/TestGetXMLStreamReaderMTOMEncoded.java?rev=1481554&r1=1481553&r2=1481554&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/mtom/TestGetXMLStreamReaderMTOMEncoded.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/mtom/TestGetXMLStreamReaderMTOMEncoded.java Sun May 12 13:26:19 2013
@@ -38,8 +38,12 @@ public class TestGetXMLStreamReaderMTOME
     private final static QName XOP_INCLUDE = 
             new QName("http://www.w3.org/2004/08/xop/include", "Include");
 
-    public TestGetXMLStreamReaderMTOMEncoded(OMMetaFactory metaFactory) {
+    private final boolean cache;
+    
+    public TestGetXMLStreamReaderMTOMEncoded(OMMetaFactory metaFactory, boolean cache) {
         super(metaFactory);
+        this.cache = cache;
+        addTestParameter("cache", String.valueOf(cache));
     }
 
     protected void runTest() throws Throwable {
@@ -47,12 +51,9 @@ public class TestGetXMLStreamReaderMTOME
         Attachments attachments = new Attachments(inStream, TestConstants.MTOM_MESSAGE_2.getContentType());
         OMElement root = OMXMLBuilderFactory.createSOAPModelBuilder(metaFactory, attachments).getDocumentElement();
         
-        // Build tree
-        root.build();
-        
         // Use tree as input to XMLStreamReader
         // Issue XOP:Include events for optimized MTOM text nodes
-        XOPEncodedStream xopEncodedStream = XOPUtils.getXOPEncodedStream(root.getXMLStreamReader());
+        XOPEncodedStream xopEncodedStream = XOPUtils.getXOPEncodedStream(root.getXMLStreamReader(cache));
         XMLStreamReader xmlStreamReader = xopEncodedStream.getReader();
         
         DataHandler dh = null;