reader.getAttributeQName(i),
reader.getAttributeName(i),
  public XMLEvent allocate(XMLStreamReader reader)    throws XMLStreamException  {    String text;    boolean whitespace;    boolean ignorableWhitespace;    int len;    List namespaces;    int eventType = reader.getEventType();    Location location = reader.getLocation();    switch (eventType)      {      case XMLStreamConstants.CDATA:        text = reader.getText();        whitespace = isWhitespace(text);        // TODO ignorableWhitespace        ignorableWhitespace = whitespace && false;        return new CharactersImpl(location, text,                                  whitespace, true, ignorableWhitespace);      case XMLStreamConstants.CHARACTERS:        text = reader.getText();        whitespace = false;        // TODO ignorableWhitespace        ignorableWhitespace = whitespace && false;        return new CharactersImpl(location, text,                                  whitespace, false, ignorableWhitespace);      case XMLStreamConstants.COMMENT:        text = reader.getText();        return new CommentImpl(location, text);      case XMLStreamConstants.DTD:        text = reader.getText();        List notations = new LinkedList();        List entities = new LinkedList();        // TODO readDTDBody(notations, entities);        return new DTDImpl(location, text, null, notations, entities);      case XMLStreamConstants.END_DOCUMENT:        return new EndDocumentImpl(location);      case XMLStreamConstants.END_ELEMENT:        len = reader.getNamespaceCount();        namespaces = new LinkedList();        for (int i = 0; i < len; i++)          namespaces.add(new NamespaceImpl(location,                                           reader.getNamespacePrefix(i),                                           reader.getNamespaceURI(i)));        return new EndElementImpl(location,                                  reader.getName(),                                  namespaces);      case XMLStreamConstants.ENTITY_REFERENCE:        String name = reader.getLocalName();        //EntityDeclaration decl =        //  (EntityDeclaration) entityDeclarations.get(name);        //return new EntityReferenceImpl(location, decl, name);        return new EntityReferenceImpl(location, name, null, null, null, null);      case XMLStreamConstants.PROCESSING_INSTRUCTION:        return new ProcessingInstructionImpl(location,                                             reader.getPITarget(),                                             reader.getPIData());      case XMLStreamConstants.SPACE:        text = reader.getText();        whitespace = true;        // TODO ignorableWhitespace        ignorableWhitespace = whitespace && false;        return new CharactersImpl(location, text,                                  whitespace, false, ignorableWhitespace);      case XMLStreamConstants.START_DOCUMENT:        String systemId = location.getLocationURI();        String encoding = reader.getCharacterEncodingScheme();        boolean encodingDeclared = encoding != null;        if (encoding == null)          {            encoding = reader.getEncoding();            if (encoding == null)              encoding = "UTF-8";          }        String xmlVersion = reader.getVersion();        if (xmlVersion == null)          xmlVersion = "1.0";        boolean xmlStandalone = reader.isStandalone();        boolean standaloneDeclared = reader.standaloneSet();        return new StartDocumentImpl(location,                                     systemId,                                     encoding,                                     xmlVersion,                                     xmlStandalone,                                     standaloneDeclared,                                     encodingDeclared);      case XMLStreamConstants.START_ELEMENT:        len = reader.getNamespaceCount();        namespaces = new LinkedList();        for (int i = 0; i < len; i++)          namespaces.add(new NamespaceImpl(location,                                           reader.getNamespacePrefix(i),                                           reader.getNamespaceURI(i)));        len = reader.getAttributeCount();        List attributes = new LinkedList();        for (int i = 0; i < len; i++)          attributes.add(new AttributeImpl(location,                                           reader.getAttributeQName(i),                                           reader.getAttributeValue(i),                                           QName.valueOf(reader.getAttributeType(i)),                                           reader.isAttributeSpecified(i)));        return new StartElementImpl(location,                                    reader.getName(),                                    attributes, namespaces,                                    reader.getNamespaceContext());      default:        throw new XMLStreamException("Unknown event type: " + eventType);      }  }