in commons-digester3-core/src/main/java/org/apache/commons/digester3/SetNestedPropertiesRule.java [119:194]
public void body( final String namespace, final String name, String text )
throws Exception
{
String propName = currChildElementName;
if ( elementNames.containsKey( currChildElementName ) )
{
// override propName
propName = elementNames.get( currChildElementName );
if ( propName == null )
{
// user wants us to ignore this element
return;
}
}
final boolean debug = log.isDebugEnabled();
if ( debug )
{
log.debug( "[SetNestedPropertiesRule]{" + getDigester().getMatch() + "} Setting property '" + propName
+ "' to '" + text + "'" );
}
// Populate the corresponding properties of the top object
final Object top = getDigester().peek();
if ( debug )
{
if ( top != null )
{
log.debug( "[SetNestedPropertiesRule]{" + getDigester().getMatch() + "} Set "
+ top.getClass().getName() + " properties" );
}
else
{
log.debug( "[SetPropertiesRule]{" + getDigester().getMatch() + "} Set NULL properties" );
}
}
if ( trimData )
{
text = text.trim();
}
if ( !allowUnknownChildElements )
{
// Force an exception if the property does not exist
// (BeanUtils.setProperty() silently returns in this case)
if ( top instanceof DynaBean )
{
final DynaProperty desc = ( (DynaBean) top ).getDynaClass().getDynaProperty( propName );
if ( desc == null )
{
throw new NoSuchMethodException( "Bean has no property named " + propName );
}
}
else
/* this is a standard JavaBean */
{
final PropertyDescriptor desc = getPropertyDescriptor( top, propName );
if ( desc == null )
{
throw new NoSuchMethodException( "Bean has no property named " + propName );
}
}
}
try
{
setProperty( top, propName, text );
}
catch ( final NullPointerException e )
{
log.error( "NullPointerException: " + "top=" + top + ",propName=" + propName + ",value=" + text + "!" );
throw e;
}
}