Program: 64290
Project: 64290
Buggy source:
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException {
  try {
    Descriptor xmlDescriptor=null;
    boolean isPrimitiveType=false;
    Class primitiveWrapperClass=null;
    String type=null;
    if (xmlReader.isNamespaceAware()) {
      type=atts.getValue(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,Constants.SCHEMA_TYPE_ATTRIBUTE);
    }
 else {
      type=atts.getValue(Constants.EMPTY_STRING,Constants.SCHEMA_TYPE_ATTRIBUTE);
    }
    if (null != type) {
      XPathFragment typeFragment=new XPathFragment(type,xmlReader.namespaceSeparator,xmlReader.isNamespaceAware());
      if (xmlReader.isNamespaceAware() && null != unmarshalNamespaceResolver) {
        typeFragment.setNamespaceURI(unmarshalNamespaceResolver.getNamespaceURI(typeFragment.getPrefix()));
      }
      xmlDescriptor=xmlContext.getDescriptorByGlobalType(typeFragment);
      if (xmlDescriptor == null) {
        QName lookupQName=null;
        if (typeFragment.getNamespaceURI() == null) {
          lookupQName=new QName(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI,typeFragment.getLocalName());
        }
 else {
          lookupQName=new QName(typeFragment.getNamespaceURI(),typeFragment.getLocalName());
        }
        primitiveWrapperClass=(Class)XMLConversionManager.getDefaultXMLTypes().get(lookupQName);
      }
    }
    if (xmlDescriptor == null) {
      String name;
      if (localName == null || localName.length() == 0) {
        name=qName;
      }
 else {
        name=localName;
      }
      XPathQName rootQName;
      if (namespaceURI == null || namespaceURI.length() == 0) {
        rootQName=new XPathQName(name,xmlReader.isNamespaceAware());
      }
 else {
        rootQName=new XPathQName(namespaceURI,name,xmlReader.isNamespaceAware());
      }
      xmlDescriptor=xmlContext.getDescriptor(rootQName);
      if (null == xmlDescriptor) {
        Object obj=this.xmlReader.getCurrentObject(session,null);
        if (obj != null) {
          xmlDescriptor=(Descriptor)xmlContext.getSession(obj.getClass()).getDescriptor(obj.getClass());
        }
        if (xmlDescriptor == null) {
          isPrimitiveType=primitiveWrapperClass != null;
        }
      }
      if (null == xmlDescriptor && !isPrimitiveType) {
        if (!this.keepAsElementPolicy.isKeepNoneAsElement()) {
          this.documentBuilder=new SAXDocumentBuilder();
          documentBuilder.startDocument();
          for (          String prefix : this.unmarshalNamespaceResolver.getPrefixes()) {
            documentBuilder.startPrefixMapping(prefix,this.unmarshalNamespaceResolver.getNamespaceURI(prefix));
          }
          documentBuilder.startElement(namespaceURI,localName,qName,atts);
          this.xmlReader.setContentHandler(documentBuilder);
          return;
        }
        Class unmappedContentHandlerClass=unmarshaller.getUnmappedContentHandlerClass();
        if (null == unmappedContentHandlerClass) {
          throw XMLMarshalException.noDescriptorWithMatchingRootElement(rootQName.toString());
        }
 else {
          UnmappedContentHandler unmappedContentHandler;
          try {
            PrivilegedNewInstanceFromClass privilegedNewInstanceFromClass=new PrivilegedNewInstanceFromClass(unmappedContentHandlerClass);
            unmappedContentHandler=(UnmappedContentHandler)privilegedNewInstanceFromClass.run();
          }
 catch (          ClassCastException e) {
            throw XMLMarshalException.unmappedContentHandlerDoesntImplement(e,unmappedContentHandlerClass.getName());
          }
catch (          IllegalAccessException e) {
            throw XMLMarshalException.errorInstantiatingUnmappedContentHandler(e,unmappedContentHandlerClass.getName());
          }
catch (          InstantiationException e) {
            throw XMLMarshalException.errorInstantiatingUnmappedContentHandler(e,unmappedContentHandlerClass.getName());
          }
          UnmappedContentHandlerWrapper unmappedContentHandlerWrapper=new UnmappedContentHandlerWrapper(unmappedContentHandler,this);
          unmappedContentHandler.startElement(namespaceURI,localName,qName,atts);
          xmlReader.setContentHandler(unmappedContentHandler);
          setObject(unmappedContentHandlerWrapper.getCurrentObject());
          return;
        }
      }
    }
    session=xmlContext.getSession(xmlDescriptor);
    UnmarshalRecord unmarshalRecord;
    if (isPrimitiveType) {
      unmarshalRecord=new XMLRootRecord(primitiveWrapperClass);
      unmarshalRecord.setSession((CoreAbstractSession)unmarshaller.getContext().getSession());
      unmarshalRecord.setXMLReader(this.getXMLReader());
    }
 else     if (xmlDescriptor.hasInheritance()) {
      unmarshalRecord=new UnmarshalRecordImpl(null);
      unmarshalRecord.setUnmarshaller(unmarshaller);
      unmarshalRecord.setUnmarshalNamespaceResolver(unmarshalNamespaceResolver);
      unmarshalRecord.setXMLReader(this.getXMLReader());
      unmarshalRecord.setAttributes(atts);
      Class classValue=xmlDescriptor.getInheritancePolicy().classFromRow(new org.eclipse.persistence.oxm.record.UnmarshalRecord(unmarshalRecord),(CoreAbstractSession)session);
      if (classValue == null) {
        QName leafElementType=xmlDescriptor.getDefaultRootElementType();
        if (leafElementType != null) {
          Object indicator=xmlDescriptor.getInheritancePolicy().getClassIndicatorMapping().get(leafElementType);
          if (indicator != null) {
            classValue=(Class)indicator;
          }
        }
      }
      if (classValue != null) {
        xmlDescriptor=(Descriptor)session.getDescriptor(classValue);
      }
 else {
        if (Modifier.isAbstract(xmlDescriptor.getJavaClass().getModifiers())) {
          throw DescriptorException.missingClassIndicatorField((XMLRecord)unmarshalRecord,(org.eclipse.persistence.oxm.XMLDescriptor)xmlDescriptor.getInheritancePolicy().getDescriptor());
        }
      }
      org.eclipse.persistence.oxm.record.UnmarshalRecord wrapper=(org.eclipse.persistence.oxm.record.UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord((CoreAbstractSession)session);
      unmarshalRecord=wrapper.getUnmarshalRecord();
    }
 else {
      org.eclipse.persistence.oxm.record.UnmarshalRecord wrapper=(org.eclipse.persistence.oxm.record.UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord((CoreAbstractSession)session);
      unmarshalRecord=wrapper.getUnmarshalRecord();
      unmarshalRecord.setXMLReader(this.getXMLReader());
    }
    this.descriptor=xmlDescriptor;
    this.rootRecord=unmarshalRecord;
    unmarshalRecord.setUnmarshaller(this.unmarshaller);
    unmarshalRecord.setXMLReader(this.getXMLReader());
    if (locator != null) {
      unmarshalRecord.setDocumentLocator(xmlReader.getLocator());
    }
    unmarshalRecord.setAttributes(atts);
    if (atts != null && null != atts.getValue(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,Constants.SCHEMA_NIL_ATTRIBUTE)) {
      unmarshalRecord.setNil(true);
    }
    unmarshalRecord.setUnmarshalNamespaceResolver(unmarshalNamespaceResolver);
    unmarshalRecord.startDocument();
    unmarshalRecord.initializeRecord((Mapping)null);
    xmlReader.setContentHandler(unmarshalRecord);
    xmlReader.setLexicalHandler(unmarshalRecord);
    unmarshalRecord.startElement(namespaceURI,localName,qName,atts);
  }
 catch (  EclipseLinkException e) {
    if (null == xmlReader.getErrorHandler()) {
      throw e;
    }
 else {
      SAXParseException saxParseException=new SAXParseException(null,null,null,0,0,e);
      xmlReader.getErrorHandler().error(saxParseException);
    }
  }
}

Fixed version (ground truth):
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException {
  try {
    Descriptor xmlDescriptor=null;
    boolean isPrimitiveType=false;
    Class primitiveWrapperClass=null;
    String type=null;
    if (xmlReader.isNamespaceAware()) {
      type=atts.getValue(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,Constants.SCHEMA_TYPE_ATTRIBUTE);
    }
 else {
      type=atts.getValue(Constants.EMPTY_STRING,Constants.SCHEMA_TYPE_ATTRIBUTE);
    }
    if (null != type) {
      XPathFragment typeFragment=new XPathFragment(type,xmlReader.namespaceSeparator,xmlReader.isNamespaceAware());
      if (xmlReader.isNamespaceAware() && null != unmarshalNamespaceResolver) {
        typeFragment.setNamespaceURI(unmarshalNamespaceResolver.getNamespaceURI(typeFragment.getPrefix()));
      }
      xmlDescriptor=xmlContext.getDescriptorByGlobalType(typeFragment);
      if (xmlDescriptor == null) {
        QName lookupQName=null;
        if (typeFragment.getNamespaceURI() == null) {
          lookupQName=new QName(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI,typeFragment.getLocalName());
        }
 else {
          lookupQName=new QName(typeFragment.getNamespaceURI(),typeFragment.getLocalName());
        }
        primitiveWrapperClass=(Class)XMLConversionManager.getDefaultXMLTypes().get(lookupQName);
      }
    }
    if (xmlDescriptor == null) {
      String name;
      if (localName == null || localName.length() == 0) {
        name=qName;
      }
 else {
        name=localName;
      }
      XPathQName rootQName;
      if (namespaceURI == null || namespaceURI.length() == 0) {
        rootQName=new XPathQName(name,xmlReader.isNamespaceAware());
      }
 else {
        rootQName=new XPathQName(namespaceURI,name,xmlReader.isNamespaceAware());
      }
      xmlDescriptor=xmlContext.getDescriptor(rootQName);
      if (null == xmlDescriptor) {
        Object obj=this.xmlReader.getCurrentObject(session,null);
        if (obj != null) {
          xmlDescriptor=(Descriptor)xmlContext.getSession(obj.getClass()).getDescriptor(obj.getClass());
        }
        if (xmlDescriptor == null) {
          isPrimitiveType=primitiveWrapperClass != null;
        }
      }
      if (null == xmlDescriptor && !isPrimitiveType) {
        if (!this.keepAsElementPolicy.isKeepNoneAsElement()) {
          this.documentBuilder=new SAXDocumentBuilder();
          documentBuilder.startDocument();
          for (          String prefix : this.unmarshalNamespaceResolver.getPrefixes()) {
            documentBuilder.startPrefixMapping(prefix,this.unmarshalNamespaceResolver.getNamespaceURI(prefix));
          }
          documentBuilder.startElement(namespaceURI,localName,qName,atts);
          this.xmlReader.setContentHandler(documentBuilder);
          return;
        }
        Class unmappedContentHandlerClass=unmarshaller.getUnmappedContentHandlerClass();
        if (null == unmappedContentHandlerClass) {
          throw XMLMarshalException.noDescriptorWithMatchingRootElement(rootQName.toString());
        }
 else {
          UnmappedContentHandler unmappedContentHandler;
          try {
            PrivilegedNewInstanceFromClass privilegedNewInstanceFromClass=new PrivilegedNewInstanceFromClass(unmappedContentHandlerClass);
            unmappedContentHandler=(UnmappedContentHandler)privilegedNewInstanceFromClass.run();
          }
 catch (          ClassCastException e) {
            throw XMLMarshalException.unmappedContentHandlerDoesntImplement(e,unmappedContentHandlerClass.getName());
          }
catch (          IllegalAccessException e) {
            throw XMLMarshalException.errorInstantiatingUnmappedContentHandler(e,unmappedContentHandlerClass.getName());
          }
catch (          InstantiationException e) {
            throw XMLMarshalException.errorInstantiatingUnmappedContentHandler(e,unmappedContentHandlerClass.getName());
          }
          UnmappedContentHandlerWrapper unmappedContentHandlerWrapper=new UnmappedContentHandlerWrapper(unmappedContentHandler,this);
          unmappedContentHandler.startElement(namespaceURI,localName,qName,atts);
          xmlReader.setContentHandler(unmappedContentHandler);
          setObject(unmappedContentHandlerWrapper.getCurrentObject());
          return;
        }
      }
    }
    session=xmlContext.getSession(xmlDescriptor);
    UnmarshalRecord unmarshalRecord;
    if (isPrimitiveType) {
      unmarshalRecord=new XMLRootRecord(primitiveWrapperClass);
      unmarshalRecord.setSession((CoreAbstractSession)unmarshaller.getContext().getSession());
      unmarshalRecord.setXMLReader(this.getXMLReader());
    }
 else     if (xmlDescriptor.hasInheritance()) {
      unmarshalRecord=new UnmarshalRecordImpl(null);
      unmarshalRecord.setUnmarshaller(unmarshaller);
      unmarshalRecord.setUnmarshalNamespaceResolver(unmarshalNamespaceResolver);
      unmarshalRecord.setXMLReader(this.getXMLReader());
      unmarshalRecord.setAttributes(atts);
      Class classValue=xmlDescriptor.getInheritancePolicy().classFromRow(new org.eclipse.persistence.oxm.record.UnmarshalRecord(unmarshalRecord),(CoreAbstractSession)session);
      if (classValue == null) {
        QName leafElementType=xmlDescriptor.getDefaultRootElementType();
        if (leafElementType != null) {
          Object indicator=xmlDescriptor.getInheritancePolicy().getClassIndicatorMapping().get(leafElementType);
          if (indicator != null) {
            classValue=(Class)indicator;
          }
        }
      }
      if (classValue != null) {
        xmlDescriptor=(Descriptor)session.getDescriptor(classValue);
      }
 else {
        if (Modifier.isAbstract(xmlDescriptor.getJavaClass().getModifiers())) {
          throw DescriptorException.missingClassIndicatorField((XMLRecord)unmarshalRecord,(org.eclipse.persistence.oxm.XMLDescriptor)xmlDescriptor.getInheritancePolicy().getDescriptor());
        }
      }
      org.eclipse.persistence.oxm.record.UnmarshalRecord wrapper=(org.eclipse.persistence.oxm.record.UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord((CoreAbstractSession)session);
      unmarshalRecord=wrapper.getUnmarshalRecord();
    }
 else {
      org.eclipse.persistence.oxm.record.UnmarshalRecord wrapper=(org.eclipse.persistence.oxm.record.UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord((CoreAbstractSession)session);
      unmarshalRecord=wrapper.getUnmarshalRecord();
      unmarshalRecord.setXMLReader(this.getXMLReader());
    }
    this.descriptor=xmlDescriptor;
    this.rootRecord=unmarshalRecord;
    unmarshalRecord.setUnmarshaller(this.unmarshaller);
    unmarshalRecord.setXMLReader(this.getXMLReader());
    if (locator != null) {
      unmarshalRecord.setDocumentLocator(xmlReader.getLocator());
    }
    unmarshalRecord.setAttributes(atts);
    boolean hasNilAttribute=(atts != null && null != atts.getValue(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,Constants.SCHEMA_NIL_ATTRIBUTE));
    unmarshalRecord.setNil(isNil || hasNilAttribute);
    unmarshalRecord.setUnmarshalNamespaceResolver(unmarshalNamespaceResolver);
    unmarshalRecord.startDocument();
    unmarshalRecord.initializeRecord((Mapping)null);
    xmlReader.setContentHandler(unmarshalRecord);
    xmlReader.setLexicalHandler(unmarshalRecord);
    unmarshalRecord.startElement(namespaceURI,localName,qName,atts);
  }
 catch (  EclipseLinkException e) {
    if (null == xmlReader.getErrorHandler()) {
      throw e;
    }
 else {
      SAXParseException saxParseException=new SAXParseException(null,null,null,0,0,e);
      xmlReader.getErrorHandler().error(saxParseException);
    }
  }
}