[jboss-svn-commits] JBL Code SVN: r13909 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/base and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jul 31 09:16:12 EDT 2007
Author: tirelli
Date: 2007-07-31 09:16:11 -0400 (Tue, 31 Jul 2007)
New Revision: 13909
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java
Log:
JBRULES-1030: fixing NPE and adding unit test
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java 2007-07-31 12:09:47 UTC (rev 13908)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java 2007-07-31 13:16:11 UTC (rev 13909)
@@ -102,28 +102,33 @@
}
final Class fieldType = (Class) inspector.getFieldTypes().get( fieldName );
final Method getterMethod = (Method) inspector.getGetterMethods().get( fieldName );
- final String className = ClassFieldExtractorFactory.BASE_PACKAGE + "/" + Type.getInternalName( clazz ) + "$" + getterMethod.getName();
+ if( fieldType != null && getterMethod != null ) {
+ final String className = ClassFieldExtractorFactory.BASE_PACKAGE + "/" + Type.getInternalName( clazz ) + "$" + getterMethod.getName();
- // generating byte array to create target class
- final byte[] bytes = dump( clazz,
- className,
- getterMethod,
- fieldType,
- clazz.isInterface() );
- // use bytes to get a class
+ // generating byte array to create target class
+ final byte[] bytes = dump( clazz,
+ className,
+ getterMethod,
+ fieldType,
+ clazz.isInterface() );
+ // use bytes to get a class
- final Class newClass = byteArrayClassLoader.defineClass( className.replace( '/',
- '.' ),
- bytes,
- PROTECTION_DOMAIN );
- // instantiating target class
- final Integer index = (Integer) inspector.getFieldNames().get( fieldName );
- final ValueType valueType = ValueType.determineValueType( fieldType );
- final Object[] params = {index, fieldType, valueType};
- return (BaseClassFieldExtractor) newClass.getConstructors()[0].newInstance( params );
+ final Class newClass = byteArrayClassLoader.defineClass( className.replace( '/',
+ '.' ),
+ bytes,
+ PROTECTION_DOMAIN );
+ // instantiating target class
+ final Integer index = (Integer) inspector.getFieldNames().get( fieldName );
+ final ValueType valueType = ValueType.determineValueType( fieldType );
+ final Object[] params = {index, fieldType, valueType};
+ return (BaseClassFieldExtractor) newClass.getConstructors()[0].newInstance( params );
+ } else {
+ throw new RuntimeDroolsException("Field/method '"+fieldName+"' not found for class '"+clazz.getName()+"'" );
+ }
}
+ } catch ( final RuntimeDroolsException e ) {
+ throw e;
} catch ( final Exception e ) {
- //e.printStackTrace();
throw new RuntimeDroolsException( e );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java 2007-07-31 12:09:47 UTC (rev 13908)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java 2007-07-31 13:16:11 UTC (rev 13909)
@@ -18,6 +18,7 @@
import junit.framework.TestCase;
+import org.drools.RuntimeDroolsException;
import org.drools.util.asm.BeanInherit;
import org.drools.util.asm.InterfaceChild;
import org.drools.util.asm.TestAbstract;
@@ -107,4 +108,26 @@
((Number) ext.getValue( null, bean )).longValue() );
}
+ public void testNonExistentField() throws Exception {
+ final Object[] objArray = new Object[1];
+
+ final TestBean obj = new TestBean();
+ obj.setBlah( false );
+ obj.setSomething( "no" );
+ obj.setObjArray( objArray );
+
+ try {
+ final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( TestBean.class,
+ "xyz",
+ getClass().getClassLoader() );
+ fail( "A RuntimeDroolsException should have been raised");
+ } catch ( RuntimeDroolsException e ) {
+ e.printStackTrace();
+ // everything is fine, since field does not exist
+ } catch ( Exception e ) {
+ fail( "A RuntimeDroolsException should have been raised");
+ }
+
+ }
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list