The case may not be supported, but even then, it should be reported as
a compilation error, not as a NPE
I'll investigate and report back later
Thanks
Davide
On 07/22/2014 05:48 PM, Borris wrote:
I was experimenting with ways of avoiding having to put literal
strings
into my rules (it is very fragile and bugs can be silent for a long
time). I tried declaring a global and then tried supplying it to a
query. This generates a backtrace during the newKieSession. A simple
example to provoke the problem:
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession =
kContainer.newKieSession("ksession-rules");
kSession.setGlobal("AString", "Hello World");
kSession.fireAllRules();
package com.sample
global java.lang.String AString;
declare Thing
name: String @key
end
rule init
when
then
insert( new Thing( AString ) );
end
query test(String $in)
Thing( $in; )
end
rule spot
when
test( "Hello World"; )
Thing( "Hello World"; )
test( AString; )
Thing( AString; )
then
System.out.println("found msg\n");
end
java.lang.NullPointerException
at
org.drools.core.rule.LogicTransformer.processElement(LogicTransformer.java:243)
at
org.drools.core.rule.LogicTransformer.processElement(LogicTransformer.java:263)
at
org.drools.core.rule.LogicTransformer.fixClonedDeclarations(LogicTransformer.java:134)
at
org.drools.core.rule.LogicTransformer.transform(LogicTransformer.java:99)
at
org.drools.core.definitions.rule.impl.RuleImpl.getTransformedLhs(RuleImpl.java:560)
at
org.drools.core.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:105)
at org.drools.core.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:100)
at
org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1455)
at
org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1435)
at
org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:838)
at
org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:266)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:412)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:346)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:498)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:469)
at com.sample.DroolsTest.main(DroolsTest.java:17)
The 3rd action in the spot rule causes the null exception during
initialise, if it is present. Comment out just that line and no
exceptions happen and behaviour is as expected.
Are globals permitted in the way I am trying to use them, as a parameter
to a query?
Borris
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users