title: Why does the STAX parser think this is valid XML 1.0 but not 1.1?
body: <p>In the following code example, I use the STaX parser to parse a piece of XML. If I run the xml10 through it, it works as expected. The xml11 string (which is the same, except for the xml version) - it throws a NullPointerException. I'm running this on a Mac using JDK 1.6.</p>
  
  <pre><code>import javax.xml.namespace.QName;
  import javax.xml.stream.XMLInputFactory;
  import javax.xml.stream.XMLStreamConstants;
  import javax.xml.stream.XMLStreamReader;
  import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  import java.io.StringReader;
  import java.util.Stack;
  
  /**
   */
  public class StaxSucks {
  
      static String xml10 ="&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?&gt;\n"+
                          "&lt;anElement/&gt;";
  
      static String xml11 ="&lt;?xml version=\"1.1\" encoding=\"utf-8\" ?&gt;\n"+
              "&lt;anElement/&gt;";
  
  
      static void parse(InputStream is) throws Exception{
          final XMLInputFactory factory = XMLInputFactory.newInstance();
          factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
          final XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(is);
          Stack&lt;QName&gt; XMLDEPTH = new Stack&lt;QName&gt;();
          int eventType = xmlStreamReader.next();
          while(eventType != XMLStreamConstants.END_DOCUMENT){
              if(XMLStreamConstants.START_ELEMENT == eventType){
                  QName eventName = xmlStreamReader.getName();
                  XMLDEPTH.push(eventName);
              }else if(XMLStreamConstants.END_ELEMENT == eventType){
                  //ends should always match the starts.
                  QName eventName = xmlStreamReader.getName();
                  if(XMLDEPTH.peek().equals(eventName)){
                      XMLDEPTH.pop();
                  }else{
                      System.out.println("Hit an end with a non-matching beginning:"+eventName);
                  }
              } else{
                  System.out.println("Hit event type:"+eventType);
              }
              eventType = xmlStreamReader.next();
          }
          System.out.println("Stack is empty:"+XMLDEPTH.empty());
  
      }
  
      public static void main(String[] args) throws Exception{
          System.out.println("Starting XML1.0");
          InputStream is = new ByteArrayInputStream(xml10.getBytes("utf8"));
          parse(is);
          System.out.println("Starting XML1.1");
          is = new ByteArrayInputStream(xml11.getBytes("utf8"));
          parse(is);
      }
  }
  </code></pre>
  
  <p>Stack Trace:</p>
  
  <pre><code>Exception in thread "main" java.lang.NullPointerException
      at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanStartElement(XML11NSDocumentScannerImpl.java:351)
      at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl$NS11ContentDriver.scanRootElementHook(XML11NSDocumentScannerImpl.java:889)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3104)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
      at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
      at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(XML11NSDocumentScannerImpl.java:852)
      at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:554)
      at StaxSucks.parse(StaxSucks.java:46)
      at StaxSucks.main(StaxSucks.java:74)
  </code></pre>