diff --git a/drools-compiler/src/main/java/org/drools/compiler/GlobalError.java b/drools-compiler/src/main/java/org/drools/compiler/GlobalError.java index d37b889546c..84cb4a9f291 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/GlobalError.java +++ b/drools-compiler/src/main/java/org/drools/compiler/GlobalError.java @@ -20,10 +20,12 @@ public class GlobalError extends DroolsError { private final GlobalDescr globalDescr; + private String message; - public GlobalError(final GlobalDescr globalDescr) { + public GlobalError(final GlobalDescr globalDescr, String message) { super(globalDescr.getResource()); this.globalDescr = globalDescr; + this.message = message; } @Override @@ -40,11 +42,11 @@ public int[] getLines() { } public String getMessage() { - return getGlobal(); + return message; } public String toString() { - return "GlobalError: " + getGlobal(); + return "GlobalError: " + getGlobal() + " : " + message; } } diff --git a/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java b/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java index cb13fa1139f..b54d04f8bbb 100644 --- a/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java +++ b/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java @@ -1437,12 +1437,16 @@ private void processGlobals(PackageRegistry pkgRegistry, PackageDescr packageDes try { Class clazz = pkgRegistry.getTypeResolver().resolveType(className); + if ( clazz.isPrimitive() ) { + this.results.add( new GlobalError( global, " Primitive types are not allowed in globals : " + className ) ); + return; + } pkgRegistry.getPackage().addGlobal( identifier, clazz ); this.globals.put( identifier, clazz ); } catch (final ClassNotFoundException e) { - this.results.add( new GlobalError( global ) ); + this.results.add( new GlobalError( global, e.getMessage() ) ); e.printStackTrace(); } } diff --git a/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest2.java b/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest2.java index 1ab75a5eaa6..ae7a4eb6fd6 100644 --- a/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest2.java +++ b/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest2.java @@ -2522,4 +2522,18 @@ public void testBindingComplexExpressionErrors() { + @Test + public void testPrimitiveGlobals() { + String drl = "package org.drools.compiler.integrationtests\n" + + "\n" + + "global int foo;\n" + + "\n" + + ""; + KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder(); + kb.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL ); + System.out.println( kb.getErrors() ); + assertTrue( kb.hasErrors() ); + } + + } \ No newline at end of file