Program: 152909
Project: 152909
Buggy source:
/** 
 * Parse a value, ref or collection sub-element of a property or constructor-arg element. This method is called from several places to handle reusable elements such as idref, ref, null, value and so on. In fact, this method is the main reason why the BeanDefinitionParserDelegate is not used in full since the element namespace becomes important as mixed rfc124/bean content can coexist.
 * @param ele subelement of property element; we don't know which yet
 * @param defaultTypeClassName the default type (class name) for any<code>&lt;value&gt;</code> tag that might be created
 */
private Object parsePropertySubElement(Element ele,BeanDefinition bd,String defaultTypeClassName){
  String namespaceUri=ele.getNamespaceURI();
  if (parserContext.getDelegate().isDefaultNamespace(namespaceUri)) {
    return parserContext.getDelegate().parsePropertySubElement(ele,bd);
  }
 else   if (!NAMESPACE_URI.equals(namespaceUri)) {
    return parserContext.getDelegate().parseCustomElement(ele);
  }
 else {
    if (DomUtils.nodeNameEquals(ele,COMPONENT)) {
      BeanDefinitionHolder bdHolder=parseComponentDefinitionElement(ele,bd);
      if (bdHolder != null) {
        bdHolder=ParsingUtils.decorateBeanDefinitionIfRequired(ele,bdHolder,parserContext);
      }
      return bdHolder;
    }
    if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.REF_ELEMENT)) {
      return parseRefElement(ele);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.IDREF_ELEMENT)) {
      return parseIdRefElement(ele);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.VALUE_ELEMENT)) {
      return parseValueElement(ele,defaultTypeClassName);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.NULL_ELEMENT)) {
      TypedStringValue nullHolder=new TypedStringValue(null);
      nullHolder.setSource(parserContext.extractSource(ele));
      return nullHolder;
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.LIST_ELEMENT)) {
      return parseListElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.SET_ELEMENT)) {
      return parseSetElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.MAP_ELEMENT)) {
      return parseMapElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.PROPS_ELEMENT)) {
      return parserContext.getDelegate().parsePropsElement(ele);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.PROPS_ELEMENT)) {
      return parserContext.getDelegate().parsePropsElement(ele);
    }
    return parserContext.getDelegate().parseCustomElement(ele,bd);
  }
}

Fixed version (ground truth):
/** 
 * Parse a value, ref or collection sub-element of a property or constructor-arg element. This method is called from several places to handle reusable elements such as idref, ref, null, value and so on. In fact, this method is the main reason why the BeanDefinitionParserDelegate is not used in full since the element namespace becomes important as mixed rfc124/bean content can coexist.
 * @param ele subelement of property element; we don't know which yet
 * @param defaultTypeClassName the default type (class name) for any<code>&lt;value&gt;</code> tag that might be created
 */
private Object parsePropertySubElement(Element ele,BeanDefinition bd,String defaultTypeClassName){
  String namespaceUri=ele.getNamespaceURI();
  if (parserContext.getDelegate().isDefaultNamespace(namespaceUri)) {
    return parserContext.getDelegate().parsePropertySubElement(ele,bd);
  }
 else   if (!NAMESPACE_URI.equals(namespaceUri)) {
    return parserContext.getDelegate().parseCustomElement(ele);
  }
 else {
    if (DomUtils.nodeNameEquals(ele,COMPONENT)) {
      BeanDefinitionHolder bdHolder=parseComponentDefinitionElement(ele,bd);
      if (bdHolder != null) {
        bdHolder=ParsingUtils.decorateBeanDefinitionIfRequired(ele,bdHolder,parserContext);
      }
      return bdHolder;
    }
    if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.REF_ELEMENT)) {
      return parseRefElement(ele);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.IDREF_ELEMENT)) {
      return parseIdRefElement(ele);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.VALUE_ELEMENT)) {
      return parseValueElement(ele,defaultTypeClassName);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.NULL_ELEMENT)) {
      TypedStringValue nullHolder=new TypedStringValue(null);
      nullHolder.setSource(parserContext.extractSource(ele));
      return nullHolder;
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.LIST_ELEMENT)) {
      return parseListElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.SET_ELEMENT)) {
      return parseSetElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.MAP_ELEMENT)) {
      return parseMapElement(ele,bd);
    }
 else     if (DomUtils.nodeNameEquals(ele,BeanDefinitionParserDelegate.PROPS_ELEMENT)) {
      return parserContext.getDelegate().parsePropsElement(ele);
    }
    return parserContext.getDelegate().parseCustomElement(ele,bd);
  }
}