[jboss-svn-commits] JBL Code SVN: r33208 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun May 30 19:35:11 EDT 2010
Author: mark.proctor at jboss.com
Date: 2010-05-30 19:35:10 -0400 (Sun, 30 May 2010)
New Revision: 33208
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
JBRULES-2527 NPE for bindings using invalid field names
-Fixed with unit test for regression.
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-05-30 16:00:06 UTC (rev 33207)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java 2010-05-30 23:35:10 UTC (rev 33208)
@@ -596,7 +596,7 @@
final PredicateDescr predicateDescr,
final AbstractCompositeConstraint container) {
- Map<String, Class< ? >> declarations = getDeclarationsMap( context );
+ Map<String, Class< ? >> declarations = getDeclarationsMap( predicateDescr, context );
Map<String, Class< ? >> globals = context.getPackageBuilder().getGlobals();
final Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
@@ -660,9 +660,16 @@
}
- private Map<String, Class< ? >> getDeclarationsMap(final RuleBuildContext context) {
+ private Map<String, Class< ? >> getDeclarationsMap(final BaseDescr baseDescr, final RuleBuildContext context) {
Map<String, Class< ? >> declarations = new HashMap<String, Class< ? >>();
for ( Map.Entry<String, Declaration> entry : context.getDeclarationResolver().getDeclarations( context.getRule() ).entrySet() ) {
+ if ( entry.getValue().getExtractor() == null ) {
+ context.getErrors().add( new DescrBuildError( context.getParentDescr(),
+ baseDescr,
+ null,
+ "Field Reader does not exist for declaration '" + entry.getKey() + "' in'" + baseDescr + "' in the rule '" + context.getRule().getName() + "'" ) );
+ continue;
+ }
declarations.put( entry.getKey(),
entry.getValue().getExtractor().getExtractToClass() );
}
@@ -973,7 +980,7 @@
final InternalReadAccessor extractor,
final FieldConstraintDescr fieldConstraintDescr,
final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
- Map<String, Class< ? >> declarations = getDeclarationsMap( context );
+ Map<String, Class< ? >> declarations = getDeclarationsMap( returnValueRestrictionDescr, context );
Map<String, Class< ? >> globals = context.getPackageBuilder().getGlobals();
Dialect.AnalysisResult analysis = context.getDialect().analyzeExpression( context,
returnValueRestrictionDescr,
@@ -1065,9 +1072,6 @@
reader = context.getPkg().getClassFieldAccessorStore().getReader( ((ClassObjectType) objectType).getClassName(),
fieldName,
target );
- // extractor = context.getDialect().getClassFieldExtractorCache().getReader( ((ClassObjectType) objectType).getClassType(),
- // fieldName,
- // classloader );
} catch ( final Exception e ) {
if ( reportError ) {
context.getErrors().add( new DescrBuildError( context.getParentDescr(),
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-05-30 16:00:06 UTC (rev 33207)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-05-30 23:35:10 UTC (rev 33208)
@@ -6181,7 +6181,55 @@
jlist.get( 2 ) );
}
+
+ public void testFieldBindingOnWrongFieldName() {
+ //JBRULES-2527
+
+ String str = "";
+ str += "package org.drools\n";
+ str += "import org.drools.Person\n";
+ str += "global java.util.List mlist\n";
+ str += "rule rule1 \n";
+ str += "when\n";
+ str += " Person( $f : invalidFieldName, eval( $f != null ) )\n";
+ str += "then\n";
+ str += "end\n";
+ try {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( !kbuilder.hasErrors() ) {
+ fail( "KnowledgeBuilder should have errors" );
+ }
+ } catch ( Exception e ) {
+ fail( "Exception should not be thrown ");
+ }
+
+ str = "";
+ str += "package org.drools\n";
+ str += "import org.drools.Person\n";
+ str += "global java.util.List mlist\n";
+ str += "rule rule1 \n";
+ str += "when\n";
+ str += " Person( $f : invalidFieldName, name == ( $f ) )\n";
+ str += "then\n";
+ str += "end\n";
+
+ try {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+
+ if ( !kbuilder.hasErrors() ) {
+ fail( "KnowledgeBuilder should have errors" );
+ }
+ } catch ( Exception e ) {
+ fail( "Exception should not be thrown ");
+ }
+ }
+
public void testDeepNestedConstraints() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DeepNestedConstraints.drl" ) ) );
More information about the jboss-svn-commits
mailing list