Buggy code:
class TxAdviceBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { private static final String ATTRIBUTES = "attributes" ; private static final String TIMEOUT = "timeout" ; private static final String READ_ONLY = "read-only" ; private static final String NAME_MAP = "nameMap" ; private static final String PROPAGATION = "propagation" ; private static final String ISOLATION = "isolation" ; private static final String ROLLBACK_FOR = "rollback-for" ; private static final String NO_ROLLBACK_FOR = "no-rollback-for" ; @ Override protected Class getBeanClass ( Element element ) { } @ Override protected void doParse ( Element element , ParserContext parserContext , BeanDefinitionBuilder builder ) { } private RootBeanDefinition parseAttributeSource ( Element attrEle , ParserContext parserContext ) { List < Element > methods = DomUtils . getChildElementsByTagName ( attrEle , "method" ) ; ManagedMap transactionAttributeMap = new ManagedMap ( methods . size ( ) ) ; transactionAttributeMap . setSource ( parserContext . extractSource ( attrEle ) ) ; for ( Element methodEle : methods ) { String name = methodEle . getAttribute ( "name" ) ; TypedStringValue nameHolder = new TypedStringValue ( name ) ; nameHolder . setSource ( parserContext . extractSource ( methodEle ) ) ; RuleBasedTransactionAttribute attribute = new RuleBasedTransactionAttribute ( ) ; String propagation = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . PROPAGATION ) ; String isolation = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . ISOLATION ) ; String timeout = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . TIMEOUT ) ; String readOnly = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . READ_ONLY ) ; if ( StringUtils . hasText ( propagation ) ) { attribute . setPropagationBehaviorName ( ( ( RuleBasedTransactionAttribute . PREFIX_PROPAGATION ) + propagation ) ) ; } if ( StringUtils . hasText ( isolation ) ) { attribute . setIsolationLevelName ( ( ( RuleBasedTransactionAttribute . PREFIX_ISOLATION ) + isolation ) ) ; } if ( StringUtils . hasText ( timeout ) ) { try { attribute . setTimeout ( Integer . parseInt ( timeout ) ) ; } catch ( NumberFormatException ex ) { parserContext . getReaderContext ( ) . error ( ( ( "Timeout<seq2seq4repair_space>must<seq2seq4repair_space>be<seq2seq4repair_space>an<seq2seq4repair_space>integer<seq2seq4repair_space>value:<seq2seq4repair_space>[" + timeout ) + "]" ) , methodEle ) ; } } if ( StringUtils . hasText ( readOnly ) ) { attribute . setReadOnly ( Boolean . valueOf ( methodEle . getAttribute ( TxAdviceBeanDefinitionParser . READ_ONLY ) ) ) ; } List < RollbackRuleAttribute > rollbackRules = new LinkedList < RollbackRuleAttribute > ( ) ; if ( methodEle . hasAttribute ( TxAdviceBeanDefinitionParser . ROLLBACK_FOR ) ) { String rollbackForValue = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . ROLLBACK_FOR ) ; addRollbackRuleAttributesTo ( rollbackRules , rollbackForValue ) ; } if ( methodEle . hasAttribute ( TxAdviceBeanDefinitionParser . NO_ROLLBACK_FOR ) ) { String noRollbackForValue = methodEle . getAttribute ( TxAdviceBeanDefinitionParser . NO_ROLLBACK_FOR ) ; addNoRollbackRuleAttributesTo ( rollbackRules , noRollbackForValue ) ; } attribute . setRollbackRules ( rollbackRules ) ; transactionAttributeMap . put ( nameHolder , attribute ) ; } RootBeanDefinition attributeSourceDefinition = new RootBeanDefinition ( NameMatchTransactionAttributeSource . class ) ; attributeSourceDefinition . setSource ( parserContext . extractSource ( attrEle ) ) ; <START_BUG> attributeSourceDefinition . getPropertyValues ( ) . addPropertyValue ( TxAdviceBeanDefinitionParser . NAME_MAP , transactionAttributeMap ) ; <END_BUG> return attributeSourceDefinition ; } private void addRollbackRuleAttributesTo ( List < RollbackRuleAttribute > rollbackRules , String rollbackForValue ) { } private void addNoRollbackRuleAttributesTo ( List < RollbackRuleAttribute > rollbackRules , String noRollbackForValue ) { } }

Fix:
attributeSourceDefinition . getPropertyValues ( ) . add ( TxAdviceBeanDefinitionParser . NAME_MAP , transactionAttributeMap ) ;