You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2010/06/09 00:05:41 UTC

svn commit: r952840 - in /webservices/commons/trunk/modules/axiom/modules: axiom-api/src/main/java/org/apache/axiom/ext/stax/ axiom-api/src/main/java/org/apache/axiom/util/stax/ axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/ axiom-api/src/...

Author: veithen
Date: Tue Jun  8 22:05:41 2010
New Revision: 952840

URL: http://svn.apache.org/viewvc?rev=952840&view=rev
Log:
WSCOMMONS-518 / AXIS2-4603: Only allow unwrapping of selected XMLStreamReader wrappers and use a specialized API (XOPUtils#getXOPEncodedStream) to unwrap XOPDecodingStreamReader.

Added:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java
      - copied, changed from r949515, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderContainer.java
Removed:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderContainer.java
Modified:
    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/dialect/BEAStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/DisallowDoctypeDeclStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/NamespaceContextCorrectingXMLStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/WoodstoxStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
    webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java

Copied: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java (from r949515, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderContainer.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderContainer.java&r1=949515&r2=952840&rev=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderContainer.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java Tue Jun  8 22:05:41 2010
@@ -16,23 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.util.stax.wrapper;
+package org.apache.axiom.ext.stax;
 
 import javax.xml.stream.XMLStreamReader;
 
 /**
- * Marker interface for Axiom {@link XMLStreamReader} classes that
- * wrap or delegate to another (parent) XMLStreamReader.
+ * Interface implemented by {@link XMLStreamReader} classes that delegate to another stream reader
+ * and that can be safely unwrapped.
  * <p>
- * The marker interface is necessary so that consumers 
- * can access the original parser.
+ * This interface gives access to the parent reader, i.e. it allows to unwrap a stream reader
+ * wrapper. It should be noted that in general, unwrapping a wrapper and accessing the parent object
+ * is not a safe operation because it may invalidate the state of the wrapper (which may still be
+ * used later). Therefore this interface must only be implemented by {@link XMLStreamReader} classes
+ * for which unwrapping is a safe operation. In particular, this interface should not be implemented
+ * by wrappers that alter the sequence of events produced by the stream reader.
  * <p>
- * Note that the only the {@link #getParent()} method is applicable.
- * Please do not add a <code>setParent()</code> method since that would
- * violate the immutable characteristic of the {@link XMLStreamReaderWrapper}.
- * 
- * @see org.apache.axiom.util.stax.XMLStreamReaderUtils
+ * This interface is used by
+ * {@link org.apache.axiom.util.stax.XMLStreamReaderUtils#getOriginalXMLStreamReader(XMLStreamReader)}
+ * to get access to the original parser.
  */
-public interface XMLStreamReaderContainer {
+public interface DelegatingXMLStreamReader extends XMLStreamReader {
     XMLStreamReader getParent();
 }

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/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java?rev=952840&r1=952839&r2=952840&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 Tue Jun  8 22:05:41 2010
@@ -29,13 +29,13 @@ import javax.xml.stream.XMLStreamExcepti
 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.DataHandlerReader;
 import org.apache.axiom.util.activation.EmptyDataSource;
 import org.apache.axiom.util.base64.Base64DecodingOutputStreamWriter;
 import org.apache.axiom.util.blob.BlobDataSource;
 import org.apache.axiom.util.blob.MemoryBlob;
 import org.apache.axiom.util.blob.WritableBlob;
-import org.apache.axiom.util.stax.wrapper.XMLStreamReaderContainer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -189,8 +189,8 @@ public class XMLStreamReaderUtils {
             String clsName = (parser != null) ? parser.getClass().toString() : "null";
             log.debug("Entry getOriginalXMLStreamReader: " + clsName);
         }
-        while (parser instanceof XMLStreamReaderContainer) {
-            parser = ((XMLStreamReaderContainer) parser).getParent();
+        while (parser instanceof DelegatingXMLStreamReader) {
+            parser = ((DelegatingXMLStreamReader) parser).getParent();
             if (log.isDebugEnabled()) {
                 String clsName = (parser != null) ? parser.getClass().toString() : "null";
                 log.debug("  parent: " + clsName);
@@ -202,38 +202,4 @@ public class XMLStreamReaderUtils {
         }
         return parser;
     }
-    
-    /**
-     * Searches the wrapper and delegate classes to find an
-     * {@link XMLStreamReader} of a given type.
-     * 
-     * @param parser
-     *            the object to extract the wrapped reader from
-     * @param type
-     *            the type of reader to search for
-     * @return the first {@link XMLStreamReader} of the given type in the chain
-     *         of wrappers, or <code>null</code> if no such reader was found
-     */
-    public static XMLStreamReader getWrappedXMLStreamReader(XMLStreamReader parser, Class type) {
-        if (log.isDebugEnabled()) {
-            String clsName = (parser != null) ? parser.getClass().toString() : "null";
-            log.debug("Entry getWrappedXMLStreamReader: " + clsName);
-        }
-        while (!type.isInstance(parser) &&
-                (parser instanceof XMLStreamReaderContainer)) {
-            parser = ((XMLStreamReaderContainer) parser).getParent();
-            if (log.isDebugEnabled()) {
-                String clsName = (parser != null) ? parser.getClass().toString() : "null";
-                log.debug("  parent: " + clsName);
-            }
-        }
-        if (!type.isInstance(parser)) {
-            parser = null;
-        }
-        if (log.isDebugEnabled()) {
-            String clsName = (parser != null) ? parser.getClass().toString() : "null";
-            log.debug("Exit getWrappedXMLStreamReader: " + clsName);
-        }
-        return parser;
-    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/BEAStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/BEAStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/BEAStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/BEAStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -25,10 +25,11 @@ import javax.xml.namespace.NamespaceCont
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.namespace.AbstractNamespaceContext;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class BEAStreamReaderWrapper extends XMLStreamReaderWrapper {
+class BEAStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     /**
      * The character set encoding as inferred from the start bytes of the stream.
      */
@@ -158,4 +159,8 @@ class BEAStreamReaderWrapper extends XML
             }
         };
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/DisallowDoctypeDeclStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/DisallowDoctypeDeclStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/DisallowDoctypeDeclStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/DisallowDoctypeDeclStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -22,9 +22,10 @@ package org.apache.axiom.util.stax.diale
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class DisallowDoctypeDeclStreamReaderWrapper extends XMLStreamReaderWrapper {
+class DisallowDoctypeDeclStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     public DisallowDoctypeDeclStreamReaderWrapper(XMLStreamReader parent) {
         super(parent);
     }
@@ -36,4 +37,8 @@ class DisallowDoctypeDeclStreamReaderWra
         }
         return event;
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/NamespaceContextCorrectingXMLStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/NamespaceContextCorrectingXMLStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/NamespaceContextCorrectingXMLStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/NamespaceContextCorrectingXMLStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -23,6 +23,7 @@ import javax.xml.namespace.NamespaceCont
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.namespace.ScopedNamespaceContext;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
@@ -35,7 +36,7 @@ import org.apache.axiom.util.stax.wrappe
  * {@link XMLStreamReader#getNamespaceContext()} and {@link XMLStreamReader#getNamespaceURI(String)}
  * methods. Invocations of these two methods will therefore never reach the underlying reader.
  */
-class NamespaceContextCorrectingXMLStreamReaderWrapper extends XMLStreamReaderWrapper {
+class NamespaceContextCorrectingXMLStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     private final ScopedNamespaceContext namespaceContext = new ScopedNamespaceContext();
 
     /**
@@ -84,4 +85,8 @@ class NamespaceContextCorrectingXMLStrea
     public String getNamespaceURI(String prefix) {
         return namespaceContext.getNamespaceURI(prefix);
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/SJSXPStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -24,9 +24,10 @@ import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class SJSXPStreamReaderWrapper extends XMLStreamReaderWrapper {
+class SJSXPStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     public SJSXPStreamReaderWrapper(XMLStreamReader parent) {
         super(parent);
     }
@@ -143,4 +144,8 @@ class SJSXPStreamReaderWrapper extends X
     public NamespaceContext getNamespaceContext() {
         return new SJSXPNamespaceContextWrapper(super.getNamespaceContext());
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/WoodstoxStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/WoodstoxStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/WoodstoxStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/WoodstoxStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -20,9 +20,10 @@ package org.apache.axiom.util.stax.diale
 
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class WoodstoxStreamReaderWrapper extends XMLStreamReaderWrapper {
+class WoodstoxStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     public WoodstoxStreamReaderWrapper(XMLStreamReader reader) {
         super(reader);
     }
@@ -74,4 +75,8 @@ class WoodstoxStreamReaderWrapper extend
         // This addresses WSTX-201:
         return getEventType() == CHARACTERS;
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/XLXPStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -21,9 +21,10 @@ package org.apache.axiom.util.stax.diale
 
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.ext.stax.DelegatingXMLStreamReader;
 import org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper;
 
-class XLXPStreamReaderWrapper extends XMLStreamReaderWrapper {
+class XLXPStreamReaderWrapper extends XMLStreamReaderWrapper implements DelegatingXMLStreamReader {
     public XLXPStreamReaderWrapper(XMLStreamReader parent) {
         super(parent);
     }
@@ -32,4 +33,8 @@ class XLXPStreamReaderWrapper extends XM
         // XLXP returns true for SPACE events as well; this is not correct
         return getEventType() == CHARACTERS;
     }
+
+    public XMLStreamReader getParent() {
+        return super.getParent();
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderWrapper.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/wrapper/XMLStreamReaderWrapper.java Tue Jun  8 22:05:41 2010
@@ -31,7 +31,7 @@ import javax.xml.stream.XMLStreamReader;
  * similar to {@link javax.xml.stream.util.StreamReaderDelegate}, with the difference that it is
  * immutable.
  */
-public class XMLStreamReaderWrapper implements XMLStreamReader, XMLStreamReaderContainer {
+public class XMLStreamReaderWrapper implements XMLStreamReader {
     private final XMLStreamReader parent;
 
     /**
@@ -44,11 +44,15 @@ public class XMLStreamReaderWrapper impl
     }
     
     /**
-     * Get Parent
-     * Note that setParent is intentionally omitted.  XMLStreamReaderWrapper is immutable.
-     * @return XMLStreamReader parent
+     * Get the parent stream reader. This method is declared as protected because it should only be
+     * used by subclasses. However, stream reader wrappers that can safely be unwrapped may
+     * implement the {@link org.apache.axiom.ext.stax.DelegatingXMLStreamReader} interface to make
+     * this a public method. Note that a corresponding <code>setParent</code> method is
+     * intentionally omitted because {@link XMLStreamReaderWrapper} is immutable.
+     * 
+     * @return XMLStreamReader the parent (wrapped) stream reader
      */
-    public XMLStreamReader getParent() {
+    protected XMLStreamReader getParent() {
         return parent;
     }
 

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java Tue Jun  8 22:05:41 2010
@@ -33,7 +33,6 @@ import javax.xml.stream.XMLStreamExcepti
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
-import org.apache.axiom.util.stax.wrapper.XMLStreamReaderContainer;
 
 /**
  * {@link XMLStreamReader} wrapper that encodes XOP. It assumes that the underlying reader
@@ -53,8 +52,7 @@ import org.apache.axiom.util.stax.wrappe
  * This class defers loading of {@link DataHandler} objects until {@link #getDataHandler(String)} is
  * called, except if this is not supported by the underlying stream.
  */
-public class XOPEncodingStreamReader extends XOPEncodingStreamWrapper 
-    implements XMLStreamReader, XMLStreamReaderContainer {
+public class XOPEncodingStreamReader extends XOPEncodingStreamWrapper implements XMLStreamReader {
     /**
      * Wrapper that adds the XOP namespace to another namespace context.
      */
@@ -532,8 +530,4 @@ public class XOPEncodingStreamReader ext
             default: return parent.isEndElement();
         }
     }
-
-    public XMLStreamReader getParent() {
-        return parent;
-    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java?rev=952840&r1=952839&r2=952840&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java Tue Jun  8 22:05:41 2010
@@ -106,19 +106,19 @@ public class MTOMStAXSOAPModelBuilderTes
         builder.setCache(false);
         XMLStreamReader reader = (XMLStreamReader) builder.getParser();
         
-        XMLStreamReader original = XMLStreamReaderUtils.getOriginalXMLStreamReader(reader);
-        
-        // The streaming parser is wrapped by a SafeXMLStreamReader and dialect readers.
-        // Thus the reader and original readers will not be the same.
-        assertTrue(reader != original);
-        
-        // The streaming parser will not have access to the attachments.  Thus this will
-        // return null
-        XMLStreamReader attachmentAccessor = 
-            XMLStreamReaderUtils.getWrappedXMLStreamReader(reader, OMAttachmentAccessor.class);
-        
-        assertTrue(attachmentAccessor == null);
+        // For an MTOM message, the reader is actually an XOPDecodingStreamReader. This one
+        // cannot be unwrapped by getOriginalXMLStreamReader
+        assertSame(reader, XMLStreamReaderUtils.getOriginalXMLStreamReader(reader));
+        
+        // To get access to the original reader, we first need to unwrap the
+        // XOPDecodingStreamReader using XOPUtils
+        XMLStreamReader encodedReader = XOPUtils.getXOPEncodedStream(reader).getReader();
+        assertTrue(encodedReader != reader);
+
+        // Now we can get to the original parser
+        XMLStreamReader original = XMLStreamReaderUtils.getOriginalXMLStreamReader(encodedReader);
         
+        assertTrue(!original.getClass().getName().startsWith("org.apache.axiom."));
     }
     
     public void testAccessToCachedParser() throws Exception {
@@ -129,13 +129,6 @@ public class MTOMStAXSOAPModelBuilderTes
         
         // The caching parser will be an OMStaXWrapper.
         assertTrue(original instanceof OMStAXWrapper);
-        
-        XMLStreamReader attachmentAccessor = 
-            XMLStreamReaderUtils.getWrappedXMLStreamReader(reader, OMAttachmentAccessor.class);
-        
-        // Thus the attachmentAccessor should also be the OMStaXWrapper
-        assertTrue(attachmentAccessor instanceof OMStAXWrapper);
-        
     }
     
     public void testCreateOMElement() throws Exception {