[jboss-jira] [JBoss JIRA] Created: (JBRULES-1952) Empty rule.package file causes NullPointerException in Drools Eclipse plugin when creating guided rules

Shahad Ahmed (JIRA) jira-events at lists.jboss.org
Mon Feb 2 10:40:44 EST 2009


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

        



More information about the jboss-jira mailing list