Author: nicolas
Date: Tue Feb 26 05:44:14 2008
New Revision: 631211
URL: http://svn.apache.org/viewvc?rev=631211&view=rev
Log:
fix error when target field is declared in the parent class
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusComponentFactoryBean.java
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusComponentFactoryBean.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusComponentFactoryBean.java?rev=631211&r1=631210&r2=631211&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusComponentFactoryBean.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusComponentFactoryBean.java
Tue Feb 26 05:44:14 2008
@@ -185,17 +185,8 @@
else
{
// explicit field injection
- Field field;
- try
- {
- fieldName = PlexusToSpringUtils.toCamelCase( fieldName
);
- field = implementation.getDeclaredField( fieldName );
- }
- catch ( NoSuchFieldException e )
- {
- logger.warn( "No field " + fieldName + " on
implementation class " + implementation );
- continue;
- }
+ fieldName = PlexusToSpringUtils.toCamelCase( fieldName );
+ Field field = findField( fieldName );
Object dependency = resolveRequirement( field,
requirement.getValue() );
if ( logger.isTraceEnabled() )
{
@@ -210,6 +201,25 @@
handlePlexusLifecycle( component );
return component;
+ }
+
+ private Field findField( String fieldName )
+ {
+ Class clazz = implementation;
+ while (clazz != Object.class)
+ {
+ try
+ {
+ return clazz.getDeclaredField( fieldName );
+ }
+ catch (NoSuchFieldException e)
+ {
+ clazz = clazz.getSuperclass();
+ }
+ }
+ String error = "No field " + fieldName + " on implementation class " +
implementation;
+ logger.error( error );
+ throw new BeanInitializationException( error );
}
private void handlePlexusLifecycle( final Object component )