Index: gnu/xml/stream/FilteredStreamReader.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/FilteredStreamReader.java,v
retrieving revision 1.1
diff -u -r1.1 FilteredStreamReader.java
--- gnu/xml/stream/FilteredStreamReader.java	4 Sep 2005 09:52:10 -0000	1.1
+++ gnu/xml/stream/FilteredStreamReader.java	8 Jul 2009 07:46:15 -0000
@@ -40,10 +40,10 @@
 import javax.xml.stream.StreamFilter;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.util.ReaderDelegate;
+import javax.xml.stream.util.StreamReaderDelegate;
 
 class FilteredStreamReader
-  extends ReaderDelegate
+  extends StreamReaderDelegate
 {
 
   final XMLStreamReader reader;
Index: gnu/xml/stream/NamespaceImpl.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/NamespaceImpl.java,v
retrieving revision 1.1
diff -u -r1.1 NamespaceImpl.java
--- gnu/xml/stream/NamespaceImpl.java	4 Sep 2005 09:52:10 -0000	1.1
+++ gnu/xml/stream/NamespaceImpl.java	8 Jul 2009 07:46:15 -0000
@@ -39,6 +39,7 @@
 
 import java.io.IOException;
 import java.io.Writer;
+import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.events.Namespace;
@@ -55,12 +56,15 @@
 
   protected final String prefix;
   protected final String uri;
+  protected final boolean specified;
 
-  protected NamespaceImpl(Location location, String prefix, String uri)
+  protected NamespaceImpl(Location location, String prefix, String uri,
+                          boolean specified)
   {
     super(location);
     this.prefix = prefix;
     this.uri = uri;
+    this.specified = specified;
   }
 
   public int getEventType()
@@ -78,6 +82,29 @@
     return uri;
   }
 
+  public boolean isSpecified()
+  {
+    return specified;
+  }
+
+  public QName getName()
+  {
+    if (isDefaultNamespaceDeclaration())
+      return new QName("", "xmlns", null);
+    else
+      return new QName("", prefix, "xmlns");
+  }
+
+  public String getDTDType()
+  {
+    return "CDATA";
+  }
+
+  public String getValue()
+  {
+    return uri;
+  }
+
   public boolean isDefaultNamespaceDeclaration()
   {
     return (prefix == null || "".equals(prefix));
Index: gnu/xml/stream/XIncludeFilter.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/XIncludeFilter.java,v
retrieving revision 1.10
diff -u -r1.10 XIncludeFilter.java
--- gnu/xml/stream/XIncludeFilter.java	11 Jan 2008 21:22:59 -0000	1.10
+++ gnu/xml/stream/XIncludeFilter.java	8 Jul 2009 07:46:15 -0000
@@ -54,7 +54,7 @@
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.util.ReaderDelegate;
+import javax.xml.stream.util.StreamReaderDelegate;
 
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
@@ -81,7 +81,7 @@
  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
  */
 class XIncludeFilter
-  extends ReaderDelegate
+  extends StreamReaderDelegate
 {
 
   static final String XINCLUDE_NS_URI = "http://www.w3.org/2001/XInclude";
Index: gnu/xml/stream/XMLEventAllocatorImpl.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java,v
retrieving revision 1.4
diff -u -r1.4 XMLEventAllocatorImpl.java
--- gnu/xml/stream/XMLEventAllocatorImpl.java	4 Mar 2008 17:40:00 -0000	1.4
+++ gnu/xml/stream/XMLEventAllocatorImpl.java	8 Jul 2009 07:46:15 -0000
@@ -110,7 +110,8 @@
         for (int i = 0; i < len; i++)
           namespaces.add(new NamespaceImpl(location,
                                            reader.getNamespacePrefix(i),
-                                           reader.getNamespaceURI(i)));
+                                           reader.getNamespaceURI(i),
+                                           false));
         return new EndElementImpl(location,
                                   reader.getName(),
                                   namespaces);
@@ -158,7 +159,8 @@
         for (int i = 0; i < len; i++)
           namespaces.add(new NamespaceImpl(location,
                                            reader.getNamespacePrefix(i),
-                                           reader.getNamespaceURI(i)));
+                                           reader.getNamespaceURI(i),
+                                           false));
         len = reader.getAttributeCount();
         List attributes = new LinkedList();
         for (int i = 0; i < len; i++)
Index: gnu/xml/stream/XMLEventFactoryImpl.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/XMLEventFactoryImpl.java,v
retrieving revision 1.3
diff -u -r1.3 XMLEventFactoryImpl.java
--- gnu/xml/stream/XMLEventFactoryImpl.java	4 Mar 2008 17:40:00 -0000	1.3
+++ gnu/xml/stream/XMLEventFactoryImpl.java	8 Jul 2009 07:46:15 -0000
@@ -98,12 +98,14 @@
   public Namespace createNamespace(String namespaceURI)
   {
     return new NamespaceImpl(location,
-                             XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
+                             XMLConstants.DEFAULT_NS_PREFIX,
+                             namespaceURI,
+                             true);
   }
 
   public Namespace createNamespace(String prefix, String namespaceUri)
   {
-     return new NamespaceImpl(location, prefix, namespaceUri);
+     return new NamespaceImpl(location, prefix, namespaceUri, true);
   }
 
   public StartElement createStartElement(QName name,
Index: javax/xml/stream/XMLEventFactory.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/xml/stream/XMLEventFactory.java,v
retrieving revision 1.6
diff -u -r1.6 XMLEventFactory.java
--- javax/xml/stream/XMLEventFactory.java	22 Jun 2008 19:43:03 -0000	1.6
+++ javax/xml/stream/XMLEventFactory.java	8 Jul 2009 07:46:20 -0000
@@ -1,5 +1,5 @@
 /* XMLEventFactory.java -- 
-   Copyright (C) 2005,2006  Free Software Foundation, Inc.
+   Copyright (C) 2005,2006,2009  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -94,8 +94,14 @@
    * system resource</li>
    * <li>the default factory class</li>
    * </ol>
+   * @param factoryId name of the factory to find, same as a property name
+   * @param classLoader the class loader to use
+   * @return the factory implementation
+   * @exception FactoryConfigurationError if an instance of this factory
+   * cannot be loaded
    */
-  static XMLEventFactory newInstance(String factoryId, ClassLoader classLoader)
+  public static XMLEventFactory newInstance(String factoryId,
+                                            ClassLoader classLoader)
     throws FactoryConfigurationError
   {
     ClassLoader loader = classLoader;
Index: javax/xml/stream/XMLInputFactory.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/xml/stream/XMLInputFactory.java,v
retrieving revision 1.6
diff -u -r1.6 XMLInputFactory.java
--- javax/xml/stream/XMLInputFactory.java	22 Jun 2008 19:43:03 -0000	1.6
+++ javax/xml/stream/XMLInputFactory.java	8 Jul 2009 07:46:20 -0000
@@ -1,5 +1,5 @@
 /* XMLInputFactory.java -- 
-   Copyright (C) 2005,2006  Free Software Foundation, Inc.
+   Copyright (C) 2005,2006,2009  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -206,6 +206,11 @@
    * system resource</li>
    * <li>the default factory class</li>
    * </ol>
+   * @param factoryId name of the factory, same as a property name
+   * @param classLoader the class loader to use
+   * @return the factory implementation
+   * @exception FactoryConfigurationError if an instance of this factory
+   * cannot be loaded
    */
   public static XMLInputFactory newInstance(String factoryId,
                                             ClassLoader classLoader)
Index: javax/xml/stream/XMLOutputFactory.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/xml/stream/XMLOutputFactory.java,v
retrieving revision 1.5
diff -u -r1.5 XMLOutputFactory.java
--- javax/xml/stream/XMLOutputFactory.java	22 Jun 2008 19:43:03 -0000	1.5
+++ javax/xml/stream/XMLOutputFactory.java	8 Jul 2009 07:46:20 -0000
@@ -1,5 +1,5 @@
 /* XMLOutputFactory.java -- 
-   Copyright (C) 2005,2006  Free Software Foundation, Inc.
+   Copyright (C) 2005,2006,2009  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -86,6 +86,16 @@
 
   /**
    * Creates a new <b>output</b> factory.
+   * @see #newInstance(String,ClassLoader)
+   */
+  public static XMLOutputFactory newInstance()
+    throws FactoryConfigurationError
+  {
+    return newInstance(null, null);
+  }
+
+  /**
+   * Creates a new <b>output</b> factory.
    * The implementation class to load is the first found in the following
    * locations:
    * <ol>
@@ -98,25 +108,35 @@
    * system resource</li>
    * <li>the default factory class</li>
    * </ol>
+   * @param factoryId the name of the factory, same as the property
+   * @param classLoader the class loader to use
+   * @return a new factory instance
+   * @exception FactoryConfigurationError if an instance of this factory
+   * could not be loaded
    */
-  public static XMLOutputFactory newInstance()
+  public static XMLOutputFactory newInstance(String factoryId,
+                                             ClassLoader classLoader)
     throws FactoryConfigurationError
   {
-    ClassLoader loader = Thread.currentThread().getContextClassLoader();
-    if (loader == null)
+    if (classLoader == null)
       {
-        loader = XMLOutputFactory.class.getClassLoader();
+        classLoader = Thread.currentThread().getContextClassLoader();
+      }
+    if (classLoader == null)
+      {
+        classLoader = XMLOutputFactory.class.getClassLoader();
       }
     String className = null;
     int count = 0;
     do
       {
-        className = getFactoryClassName(loader, count++);
+        className = getFactoryClassName(classLoader, count++);
         if (className != null)
           {
             try
               {
-                Class<?> t = (loader != null) ? loader.loadClass(className) :
+                Class<?> t = (classLoader != null) ?
+                  classLoader.loadClass(className) :
                   Class.forName(className);
                 return (XMLOutputFactory) t.newInstance();
               }
@@ -184,18 +204,6 @@
   }
 
   /**
-   * Creates a new <b>input</b> factory.
-   * This appears to be an API design bug.
-   * @see javax.xml.stream.XMLInputFactory.newInstance(String,ClassLoader)
-   */
-  public static XMLInputFactory newInstance(String factoryId,
-                                            ClassLoader classLoader)
-    throws FactoryConfigurationError
-  {
-    return XMLInputFactory.newInstance(factoryId, classLoader);
-  }
-
-  /**
    * Creates a new stream writer.
    */
   public abstract XMLStreamWriter createXMLStreamWriter(Writer stream)
Index: javax/xml/stream/events/Namespace.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/xml/stream/events/Namespace.java,v
retrieving revision 1.1
diff -u -r1.1 Namespace.java
--- javax/xml/stream/events/Namespace.java	3 Sep 2005 10:04:19 -0000	1.1
+++ javax/xml/stream/events/Namespace.java	8 Jul 2009 07:46:20 -0000
@@ -41,7 +41,7 @@
  * A namespace declaration event.
  */
 public interface Namespace
-  extends XMLEvent
+  extends Attribute
 {
 
   /**
Index: javax/xml/stream/util/ReaderDelegate.java
===================================================================
RCS file: javax/xml/stream/util/ReaderDelegate.java
diff -N javax/xml/stream/util/ReaderDelegate.java
--- javax/xml/stream/util/ReaderDelegate.java	3 Mar 2006 12:31:00 -0000	1.2
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,409 +0,0 @@
-/* ReaderDelegate.java -- 
-   Copyright (C) 2005,2006  Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library.  Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module.  An independent module is a module which is not derived from
-or based on this library.  If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so.  If you do not wish to do so, delete this
-exception statement from your version. */
-
-package javax.xml.stream.util;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.stream.Location;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-/**
- * Base class for XML stream reader filters.
- */
-public class ReaderDelegate
-  implements XMLStreamReader, XMLStreamConstants
-{
-
-  private XMLStreamReader parent;
-
-  /**
-   * Constructs an empty filter with no parent set.
-   */
-  public ReaderDelegate()
-  {
-  }
-
-  /**
-   * Constructs an empty filter with the specfied parent.
-   */
-  public ReaderDelegate(XMLStreamReader reader)
-  {
-    parent = reader;
-  }
-
-  /**
-   * Sets the parent.
-   */
-  public void setParent(XMLStreamReader reader)
-  {
-    parent = reader;
-  }
-
-  /**
-   * Returns the parent.
-   */
-  public XMLStreamReader getParent()
-  {
-    return parent;
-  }
-
-  public int next()
-    throws XMLStreamException
-  {
-    if (parent != null)
-      return parent.next();
-    throw new XMLStreamException();
-  }
-
-  public int nextTag()
-    throws XMLStreamException
-  {
-    if (parent != null)
-      return parent.nextTag();
-    throw new XMLStreamException();
-  }
-
-  public String getElementText()
-    throws XMLStreamException
-  {
-    if (parent != null)
-      return parent.getElementText();
-    throw new XMLStreamException();
-  }
-
-  public void require(int type, String namespaceURI, String localName)
-    throws XMLStreamException
-  {
-    if (parent != null)
-      parent.require(type, namespaceURI, localName);
-  }
-
-  public boolean hasNext()
-    throws XMLStreamException
-  {
-    if (parent != null)
-      return parent.hasNext();
-    return false;
-  }
-
-  public void close()
-    throws XMLStreamException
-  {
-    if (parent != null)
-      parent.close();
-  }
-
-  public String getNamespaceURI(String prefix)
-  {
-    if (parent != null)
-      return parent.getNamespaceURI(prefix);
-    return null;
-  }
-
-  public NamespaceContext getNamespaceContext()
-  {
-    if (parent != null)
-      return parent.getNamespaceContext();
-    return null;
-  }
-
-  public boolean isStartElement()
-  {
-    if (parent != null)
-      return parent.isStartElement();
-    return false;
-  }
-
-  public boolean isEndElement()
-  {
-    if (parent != null)
-      return parent.isEndElement();
-    return false;
-  }
-
-  public boolean isCharacters()
-  {
-    if (parent != null)
-      return parent.isCharacters();
-    return false;
-  }
-
-  public boolean isWhiteSpace()
-  {
-    if (parent != null)
-      return parent.isWhiteSpace();
-    return false;
-  }
-
-  public String getAttributeValue(String namespaceUri, String localName)
-  {
-    if (parent != null)
-      return parent.getAttributeValue(namespaceUri, localName);
-    return null;
-  }
-
-  public int getAttributeCount()
-  {
-    if (parent != null)
-      return parent.getAttributeCount();
-    return 0;
-  }
-
-  public QName getAttributeName(int index)
-  {
-    if (parent != null)
-      return parent.getAttributeName(index);
-    return null;
-  }
-
-  public String getAttributePrefix(int index)
-  {
-    if (parent != null)
-      return parent.getAttributePrefix(index);
-    return null;
-  }
-
-  public String getAttributeNamespace(int index)
-  {
-    if (parent != null)
-      return parent.getAttributeNamespace(index);
-    return null;
-  }
-
-  public String getAttributeLocalName(int index)
-  {
-    if (parent != null)
-      return parent.getAttributeLocalName(index);
-    return null;
-  }
-
-  public String getAttributeType(int index)
-  {
-    if (parent != null)
-      return parent.getAttributeType(index);
-    return null;
-  }
-
-  public String getAttributeValue(int index)
-  {
-    if (parent != null)
-      return parent.getAttributeValue(index);
-    return null;
-  }
-
-  public boolean isAttributeSpecified(int index)
-  {
-    if (parent != null)
-      return parent.isAttributeSpecified(index);
-    return false;
-  }
-
-  public int getNamespaceCount()
-  {
-    if (parent != null)
-      return parent.getNamespaceCount();
-    return 0;
-  }
-
-  public String getNamespacePrefix(int index)
-  {
-    if (parent != null)
-      return parent.getNamespacePrefix(index);
-    return null;
-  }
-
-  public String getNamespaceURI(int index)
-  {
-    if (parent != null)
-      return parent.getNamespaceURI(index);
-    return null;
-  }
-
-  public int getEventType()
-  {
-    if (parent != null)
-      return parent.getEventType();
-    return 0;
-  }
-
-  public String getText()
-  {
-    if (parent != null)
-      return parent.getText();
-    return null;
-  }
-
-  public int getTextCharacters(int sourceStart, char[] target,
-                               int targetStart, int length)
-    throws XMLStreamException
-  {
-    if (parent != null)
-      return parent.getTextCharacters(sourceStart, target, targetStart, length);
-    return 0;
-  }
-
-  public char[] getTextCharacters()
-  {
-    if (parent != null)
-      return parent.getTextCharacters();
-    return null;
-  }
-
-  public int getTextStart()
-  {
-    if (parent != null)
-      return parent.getTextStart();
-    return 0;
-  }
-
-  public int getTextLength()
-  {
-    if (parent != null)
-      return parent.getTextLength();
-    return 0;
-  }
-
-  public String getEncoding()
-  {
-    if (parent != null)
-      return parent.getEncoding();
-    return null;
-  }
-
-  public boolean hasText()
-  {
-    if (parent != null)
-      return parent.hasText();
-    return false;
-  }
-
-  public Location getLocation()
-  {
-    if (parent != null)
-      return parent.getLocation();
-    return null;
-  }
-
-  public QName getName()
-  {
-    if (parent != null)
-      return parent.getName();
-    return null;
-  }
-
-  public String getLocalName()
-  {
-    if (parent != null)
-      return parent.getLocalName();
-    return null;
-  }
-
-  public boolean hasName()
-  {
-    if (parent != null)
-      return parent.hasName();
-    return false;
-  }
-
-  public String getNamespaceURI()
-  {
-    if (parent != null)
-      return parent.getNamespaceURI();
-    return null;
-  }
-
-  public String getPrefix()
-  {
-    if (parent != null)
-      return parent.getPrefix();
-    return null;
-  }
-
-  public String getVersion()
-  {
-    if (parent != null)
-      return parent.getVersion();
-    return null;
-  }
-
-  public boolean isStandalone()
-  {
-    if (parent != null)
-      return parent.isStandalone();
-    return false;
-  }
-
-  public boolean standaloneSet()
-  {
-    if (parent != null)
-      return parent.standaloneSet();
-    return false;
-  }
-
-  public String getCharacterEncodingScheme()
-  {
-    if (parent != null)
-      return parent.getCharacterEncodingScheme();
-    return null;
-  }
-
-  public String getPITarget()
-  {
-    if (parent != null)
-      return parent.getPITarget();
-    return null;
-  }
-
-  public String getPIData()
-  {
-    if (parent != null)
-      return parent.getPIData();
-    return null;
-  }
-
-  public Object getProperty(String name)
-  {
-    if (parent != null)
-      return parent.getProperty(name);
-    throw new IllegalArgumentException();
-  }
-  
-}
-
Index: javax/xml/stream/util/StreamReaderDelegate.java
===================================================================
RCS file: javax/xml/stream/util/StreamReaderDelegate.java
diff -N javax/xml/stream/util/StreamReaderDelegate.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ javax/xml/stream/util/StreamReaderDelegate.java	8 Jul 2009 07:46:20 -0000
@@ -0,0 +1,409 @@
+/* StreamReaderDelegate.java -- 
+   Copyright (C) 2005,2006,2009  Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+package javax.xml.stream.util;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * Base class for XML stream reader filters.
+ */
+public class StreamReaderDelegate
+  implements XMLStreamReader, XMLStreamConstants
+{
+
+  private XMLStreamReader parent;
+
+  /**
+   * Constructs an empty filter with no parent set.
+   */
+  public StreamReaderDelegate()
+  {
+  }
+
+  /**
+   * Constructs an empty filter with the specfied parent.
+   */
+  public StreamReaderDelegate(XMLStreamReader reader)
+  {
+    parent = reader;
+  }
+
+  /**
+   * Sets the parent.
+   */
+  public void setParent(XMLStreamReader reader)
+  {
+    parent = reader;
+  }
+
+  /**
+   * Returns the parent.
+   */
+  public XMLStreamReader getParent()
+  {
+    return parent;
+  }
+
+  public int next()
+    throws XMLStreamException
+  {
+    if (parent != null)
+      return parent.next();
+    throw new XMLStreamException();
+  }
+
+  public int nextTag()
+    throws XMLStreamException
+  {
+    if (parent != null)
+      return parent.nextTag();
+    throw new XMLStreamException();
+  }
+
+  public String getElementText()
+    throws XMLStreamException
+  {
+    if (parent != null)
+      return parent.getElementText();
+    throw new XMLStreamException();
+  }
+
+  public void require(int type, String namespaceURI, String localName)
+    throws XMLStreamException
+  {
+    if (parent != null)
+      parent.require(type, namespaceURI, localName);
+  }
+
+  public boolean hasNext()
+    throws XMLStreamException
+  {
+    if (parent != null)
+      return parent.hasNext();
+    return false;
+  }
+
+  public void close()
+    throws XMLStreamException
+  {
+    if (parent != null)
+      parent.close();
+  }
+
+  public String getNamespaceURI(String prefix)
+  {
+    if (parent != null)
+      return parent.getNamespaceURI(prefix);
+    return null;
+  }
+
+  public NamespaceContext getNamespaceContext()
+  {
+    if (parent != null)
+      return parent.getNamespaceContext();
+    return null;
+  }
+
+  public boolean isStartElement()
+  {
+    if (parent != null)
+      return parent.isStartElement();
+    return false;
+  }
+
+  public boolean isEndElement()
+  {
+    if (parent != null)
+      return parent.isEndElement();
+    return false;
+  }
+
+  public boolean isCharacters()
+  {
+    if (parent != null)
+      return parent.isCharacters();
+    return false;
+  }
+
+  public boolean isWhiteSpace()
+  {
+    if (parent != null)
+      return parent.isWhiteSpace();
+    return false;
+  }
+
+  public String getAttributeValue(String namespaceUri, String localName)
+  {
+    if (parent != null)
+      return parent.getAttributeValue(namespaceUri, localName);
+    return null;
+  }
+
+  public int getAttributeCount()
+  {
+    if (parent != null)
+      return parent.getAttributeCount();
+    return 0;
+  }
+
+  public QName getAttributeName(int index)
+  {
+    if (parent != null)
+      return parent.getAttributeName(index);
+    return null;
+  }
+
+  public String getAttributePrefix(int index)
+  {
+    if (parent != null)
+      return parent.getAttributePrefix(index);
+    return null;
+  }
+
+  public String getAttributeNamespace(int index)
+  {
+    if (parent != null)
+      return parent.getAttributeNamespace(index);
+    return null;
+  }
+
+  public String getAttributeLocalName(int index)
+  {
+    if (parent != null)
+      return parent.getAttributeLocalName(index);
+    return null;
+  }
+
+  public String getAttributeType(int index)
+  {
+    if (parent != null)
+      return parent.getAttributeType(index);
+    return null;
+  }
+
+  public String getAttributeValue(int index)
+  {
+    if (parent != null)
+      return parent.getAttributeValue(index);
+    return null;
+  }
+
+  public boolean isAttributeSpecified(int index)
+  {
+    if (parent != null)
+      return parent.isAttributeSpecified(index);
+    return false;
+  }
+
+  public int getNamespaceCount()
+  {
+    if (parent != null)
+      return parent.getNamespaceCount();
+    return 0;
+  }
+
+  public String getNamespacePrefix(int index)
+  {
+    if (parent != null)
+      return parent.getNamespacePrefix(index);
+    return null;
+  }
+
+  public String getNamespaceURI(int index)
+  {
+    if (parent != null)
+      return parent.getNamespaceURI(index);
+    return null;
+  }
+
+  public int getEventType()
+  {
+    if (parent != null)
+      return parent.getEventType();
+    return 0;
+  }
+
+  public String getText()
+  {
+    if (parent != null)
+      return parent.getText();
+    return null;
+  }
+
+  public int getTextCharacters(int sourceStart, char[] target,
+                               int targetStart, int length)
+    throws XMLStreamException
+  {
+    if (parent != null)
+      return parent.getTextCharacters(sourceStart, target, targetStart, length);
+    return 0;
+  }
+
+  public char[] getTextCharacters()
+  {
+    if (parent != null)
+      return parent.getTextCharacters();
+    return null;
+  }
+
+  public int getTextStart()
+  {
+    if (parent != null)
+      return parent.getTextStart();
+    return 0;
+  }
+
+  public int getTextLength()
+  {
+    if (parent != null)
+      return parent.getTextLength();
+    return 0;
+  }
+
+  public String getEncoding()
+  {
+    if (parent != null)
+      return parent.getEncoding();
+    return null;
+  }
+
+  public boolean hasText()
+  {
+    if (parent != null)
+      return parent.hasText();
+    return false;
+  }
+
+  public Location getLocation()
+  {
+    if (parent != null)
+      return parent.getLocation();
+    return null;
+  }
+
+  public QName getName()
+  {
+    if (parent != null)
+      return parent.getName();
+    return null;
+  }
+
+  public String getLocalName()
+  {
+    if (parent != null)
+      return parent.getLocalName();
+    return null;
+  }
+
+  public boolean hasName()
+  {
+    if (parent != null)
+      return parent.hasName();
+    return false;
+  }
+
+  public String getNamespaceURI()
+  {
+    if (parent != null)
+      return parent.getNamespaceURI();
+    return null;
+  }
+
+  public String getPrefix()
+  {
+    if (parent != null)
+      return parent.getPrefix();
+    return null;
+  }
+
+  public String getVersion()
+  {
+    if (parent != null)
+      return parent.getVersion();
+    return null;
+  }
+
+  public boolean isStandalone()
+  {
+    if (parent != null)
+      return parent.isStandalone();
+    return false;
+  }
+
+  public boolean standaloneSet()
+  {
+    if (parent != null)
+      return parent.standaloneSet();
+    return false;
+  }
+
+  public String getCharacterEncodingScheme()
+  {
+    if (parent != null)
+      return parent.getCharacterEncodingScheme();
+    return null;
+  }
+
+  public String getPITarget()
+  {
+    if (parent != null)
+      return parent.getPITarget();
+    return null;
+  }
+
+  public String getPIData()
+  {
+    if (parent != null)
+      return parent.getPIData();
+    return null;
+  }
+
+  public Object getProperty(String name)
+  {
+    if (parent != null)
+      return parent.getProperty(name);
+    throw new IllegalArgumentException();
+  }
+  
+}
+
