Empty rule.package file causes NullPointerException in Drools Eclipse plugin when creating
guided rules
-------------------------------------------------------------------------------------------------------
Key: JBRULES-1952
URL:
https://jira.jboss.org/jira/browse/JBRULES-1952
Project: JBoss Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-eclipse
Affects Versions: 5.0.0.M5
Environment: Applies to all OS Platforms
Reporter: Shahad Ahmed
Assignee: Mark Proctor
The Drools Eclipse 5.0M5 plugin reports a NullPointerException from rules files in a
project if the project has a rule.package file that is essentially empty i.e. contain no
package name, imports etc (but may contain comments).
To recreate:
1. Create a new Drools project.
2. Add a new Guided Rules File to the project. At this point a new empty rule.package file
is created automatically by the plugin and the following error is reported against the new
guided rules file:
Error: java.lang.NullPointerException
If you add a package name to the rule.package file and rebuild the project then the error
disappears.
Possible Patch:
I added some debug to the DroolsEclipsePlugin class and captured the stack trace (given
below). Although the NPE is thrown in PackageBuilder.validateUniqueRuleNames, the problem
seems to be in the DroolsEclipsePlugin.generateParsedResource method where, if a package
has a rule.package file then it is added to the package in the following code:
if ( packageDef != null ) {
builder.addPackage( parseResource( packageDef,
false ).getPackageDescr());
}
However, for an empty rule.package file the expression
parseResource(packageDef,false).getPackageDescr() returns null and so that null is passed
to builder.addPackage, causing the NPE.
I think the fix is simply to add a null check guard around the offending line in
DroolsEclipsePlugin.generateParsedResource as follows:
if ( packageDef != null ) {
PackageDescr desc = parseResource( packageDef,
false ).getPackageDescr();
if (desc != null){
builder.addPackage( desc);
}
}
NOTE: After this fix is applied I see a different NPE error reported, but that is to do
with rule.package files that do not define a package name and is a separate issue, which
I've raised as a separate JIRA (JBRULES-1951)
java.lang.NullPointerException
at org.drools.compiler.PackageBuilder.validateUniqueRuleNames(PackageBui
lder.java:826)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:548
)
at org.drools.eclipse.DroolsEclipsePlugin.generateParsedResource(Unknown
Source)
at org.drools.eclipse.DroolsEclipsePlugin.parseBRLResource(Unknown Sourc
e)
at org.drools.eclipse.builder.DroolsBuilder.parseBRLFile(Unknown Source)
at org.drools.eclipse.builder.DroolsBuilder.parseResource(Unknown Source
)
at org.drools.eclipse.builder.DroolsBuilder$DroolsBuildVisitor.visit(Unk
nown Source)
at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:10
6)
at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.
java:58)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(Elem
entTreeIterator.java:81)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(Elem
entTreeIterator.java:85)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(Elem
entTreeIterator.java:85)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(Elem
entTreeIterator.java:85)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(Elem
entTreeIterator.java:85)
at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementT
reeIterator.java:126)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:68)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:104
)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:88)
at org.drools.eclipse.builder.DroolsBuilder.fullBuild(Unknown Source)
at org.drools.eclipse.builder.DroolsBuilder.incrementalBuild(Unknown Sou
rce)
at org.drools.eclipse.builder.DroolsBuilder.build(Unknown Source)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java
:633)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager
.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager
.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java
:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager
.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildMan
ager.java:309)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java
:341)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.ja
va:140)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:2
38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira