in commons-digester3-core/src/main/java/org/apache/commons/digester3/Digester.java [2907:2989]
public void startElement( final String namespaceURI, final String localName, final String qName, Attributes list )
throws SAXException
{
final boolean debug = log.isDebugEnabled();
if ( customContentHandler != null )
{
// forward calls instead of handling them here
customContentHandler.startElement( namespaceURI, localName, qName, list );
return;
}
if ( saxLog.isDebugEnabled() )
{
saxLog.debug( "startElement(" + namespaceURI + "," + localName + "," + qName + ")" );
}
// Save the body text accumulated for our surrounding element
bodyTexts.push( bodyText );
if ( debug )
{
log.debug( " Pushing body text '" + bodyText.toString() + "'" );
}
bodyText = new StringBuilder();
// the actual element name is either in localName or qName, depending
// on whether the parser is namespace aware
String name = localName;
if ( name == null || name.isEmpty() )
{
name = qName;
}
// Compute the current matching rule
final StringBuilder sb = new StringBuilder( match );
if ( !match.isEmpty() )
{
sb.append( '/' );
}
sb.append( name );
match = sb.toString();
if ( debug )
{
log.debug( " New match='" + match + "'" );
}
// Fire "begin" events for all relevant rules
final List<Rule> rules = getRules().match( namespaceURI, match, localName, list );
matches.push( rules );
if ( rules != null && !rules.isEmpty() )
{
final Substitutor substitutor = getSubstitutor();
if ( substitutor != null )
{
list = substitutor.substitute( list );
}
for ( final Rule rule : rules )
{
try
{
if ( debug )
{
log.debug( " Fire begin() for " + rule );
}
rule.begin( namespaceURI, name, list );
}
catch ( final Exception e )
{
log.error( "Begin event threw exception", e );
throw createSAXException( e );
}
catch ( final Error e )
{
log.error( "Begin event threw error", e );
throw e;
}
}
}
else if ( debug )
{
log.debug( " No rules found matching '" + match + "'." );
}
}