[rules-users] NPE for any @role( event )

Wolfgang Laun wolfgang.laun at gmail.com
Tue Jan 24 07:59:49 EST 2012


(1) Your Java code fails to populate the Knowledge Base with the
package generated by the builder.
   base.addKnowledgePackages( builder.getKnowledgePackages() );

(2) Do not qualify the class name after declare. TestEventObject is in
the same package; it has even been imported (which you needn't do).

-W


On 23/01/2012, capn_ed <cncosper at capn-ed.net> wrote:
> I am using Drools version 5.4.0.Beta1.  My rules are defined in a drl file.
>
> I cannot get a type with @role(event) to run correctly. In every case I've
> tried, I get the following error at runtime:
>
> ---------------------
> java.lang.NullPointerException
> 	at
> org.drools.reteoo.ReteooFactHandleFactory.newFactHandle(ReteooFactHandleFactory.java:56)
> 	at
> org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:80)
> 	at
> org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:65)
> 	at org.drools.common.NamedEntryPoint.createHandle(NamedEntryPoint.java:740)
> 	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:286)
> 	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:122)
> 	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:52)
> 	at test.DroolsTest.main(DroolsTest.java:62)
>
> --------------------
> Looking at the source:
>
> ReteooFactHandleFactory.java:56:
>             if ( type.getTimestampExtractor() != null ) {
>
> "type" is null, hence the NPE. Tracing through in Eclipse, I find that in
> ReteooFactHandleFactory.java, on line 54, is the following:
>
> TypeDeclaration type = conf.getTypeDeclaration();
>
> getTypeDeclaration() returns null. Stepped in, goes to
> AbstractRuleBase.java:745:
>
>     public TypeDeclaration getTypeDeclaration( Class< ? > clazz ) {
>         TypeDeclaration typeDeclaration = this.classTypeDeclaration.get(
> clazz );
>         if ( typeDeclaration == null ) {
>             // check super classes and keep a score of how up in the
> hierarchy is there a declaration
>             TypeDeclarationCandidate candidate = checkSuperClasses( clazz );
>             // now check interfaces
>             candidate = checkInterfaces( clazz,
>                                          candidate,
>                                          1 );
>             if ( candidate != null ) {
>                 typeDeclaration = candidate.candidate;
>             }
>         }
>         return typeDeclaration;
>     }
>
> On line 746,
> TypeDeclaration typeDeclaration = this.classTypeDeclaration.get( clazz );
>
> this.classTypeDeclaration is type Map<Class&lt; ? >, TypeDeclaration>. Map
> is empty (size = 0), so the get() returns null. checkSuperClasses() and
> checkInterfaces() also attempt to retrieve a TypeDeclaration from this same
> (empty) map. So, a null typeDeclaration is returned.
>
>
> Checking classTypeDeclaration references, the put() occurs in
> AbstractRuleBase.addPackages() (AbstractRuleBase.java:476), and in
> AbstractRuleBase.populateTypeDeclarationMaps() (AbstractRuleBase.java:336).
> The latter is not called before the NPE. Execution in addPackages() do not
> get to the classTypeDeclaration.put() because newPkg.getTypeDeclarations()
> is empty. So, apparently, the TypeDeclaration is never put into the Map.
>
>
> Attached is the minimal testcase that exhibits the same behavior.
>   http://drools.46999.n3.nabble.com/file/n3683063/TestRules.zip
> TestRules.zip
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/NPE-for-any-role-event-tp3683063p3683063.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list