Write this like so: EmNumberRestriction(this == ($constr.getRestrictions[0]),... -W
2011/10/5 Wacław Borowiec <wborow...@proximetry.pl> > > Thanks for your answer Thomas. It showed that this construct works fine > either way with 5.3.0.CR1, but it's other rule that causes the error: > > rule "restriction number paramId: 1, id: 0" > when > > $param : EmParamValue(id == 1, enabled == true) > $def : EmParamDefinition(this == $param.paramDefinitionId) > $cust : EmCustomParamDefinition(this == $param.customParamDef) > $constr: EmNumberConstraint(this == $cust.constraints) > $restr: EmNumberRestriction(this == $constr.restrictions[0], min <= > $param.requiredValue, max >= $param.requiredValue) > then > EmRulesUtils.logRuleExecution(kcontext); > result.addValidParam($param); > end > > and DRL error: > > [DialectError message='Unable to wire compiled classes, probably related to > compilation failures:sun.reflect.generics.reflectiveObjects.WildcardTypeImpl > cannot be cast to java.lang.Class'] > > It compiles successfully when I remove > > this == $constr.restrictions[0] > > part from last line of LHS. Again, it worked well in 5.1.1. > > On 10/05/2011 12:14 PM, Swindells, Thomas wrote: > > Why do you need the and in the rule? > Have you tried > > rule "enabled paramId: 1, id: 0" > salience 50 > when > > def0: EmParamDefinition(paramName == "p2", listIndex == -1) > EmParamValue(paramDefinitionId == def0, requiredValue == 1) > $param : EmParamValue(id == 1, enabled == false) > not ParentDisabled(id == 1) > then > $param.setEnabled(true); > update($param); > end > > Thomas > > -----Original Message----- > From: rules-users-boun...@lists.jboss.org [mailto:rules-users- > boun...@lists.jboss.org] On Behalf Of Waclaw Borowiec > Sent: 05 October 2011 10:55 > To: rules-users@lists.jboss.org > Subject: [rules-users] Compilation errors with 5.3.0.CR1 > > Hello > > I'm sending the message once again due to problems with code samples > visibility in the previous one. > > I've got following rule: > > rule "enabled paramId: 1, id: 0" > salience 50 > when > (def0: EmParamDefinition(paramName == "p2", listIndex == -1) and > EmParamValue(paramDefinitionId == def0, requiredValue == 1)) > $param : EmParamValue(id == 1, enabled == false) > not ParentDisabled(id == 1) > then > $param.setEnabled(true); > update($param); > end> > > It compiles fine under Drools 5.1.1, but after switching to 5.3.0.CR1 I get > following exception: > > [Error: unexpected end of statement] > [Near : {... def ....}] > ^ > [Line: 1, Column: 4] > at > org.mvel2.compiler.AbstractParser._captureBlock(AbstractParser.java:1470) > at > org.mvel2.compiler.AbstractParser.captureCodeBlock(AbstractParser.java:14 > 46) > at org.mvel2.compiler.AbstractParser.nextToken(AbstractParser.java:421) > at > org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:1 > 28) > at > org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:62 > ) > at org.mvel2.MVEL.analysisCompile(MVEL.java:668) > at org.mvel2.MVEL.analysisCompile(MVEL.java:672) > at > org.drools.rule.builder.PatternBuilder.setInputs(PatternBuilder.java:854) > at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:595) > at > org.drools.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternB > uilder.java:397) > at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:309) > at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:132) > at > org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.jav > a:65) > at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:80) > at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2241) > at > org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:802) > at > org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java > :388) > at > org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder > .java:566) > at > org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.ja > va:35) > at > com.proximetry.elmgr.services.DependenciesBean$Expander.addDrl(Depen > denciesBean.java:110) > > > It is > > (def0: EmParamDefinition(paramName == "p2", listIndex == -1) and > EmParamValue(paramDefinitionId == def0, requiredValue == 1)) > > > line that causes the problem - the exeption disappears after removing it. > What's interesting, when I add '$' sign to binding variable name, and the line > looks like: > > ($def0: EmParamDefinition(paramName == "p2", listIndex == -1) and > EmParamValue(paramDefinitionId == $def0, requiredValue == 1)) > > > instead of the exception I get DRL error: > > [DialectError message='Unable to wire compiled classes, probably related to > compilation failures:sun.reflect.generics.reflectiveObjects.WildcardTypeImpl > cannot be cast to java.lang.Class'] > > > For completness, this is how I add DRL resources: > > public void addDrl(Reader rdr) { > KnowledgeBuilder kBuilder = > KnowledgeBuilderFactory.newKnowledgeBuilder(); > > kBuilder.add( ResourceFactory.newReaderResource(rdr), > ResourceType.DRL); > if( kBuilder.hasErrors() ){ > for( KnowledgeBuilderError err: kBuilder.getErrors() ){ > StackTrace.error(this, err); > } > throw new IllegalStateException( "DRL errors" ); > } > knowledgeBase.addKnowledgePackages( > kBuilder.getKnowledgePackages() ); > } > > > I would be grateful if someone has an idea, why after switching Drools > version such problem exists. > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > ************************************************************************************** > This message is confidential and intended only for the addressee. If you have > received this message in error, please immediately notify the > postmas...@nds.com and delete it from your system as well as any copies. The > content of e-mails as well as traffic data may be monitored by NDS for > employment and security purposes. To protect the environment please do not > print this e-mail unless necessary. > > NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 > 4EX, United Kingdom. A company registered in England and Wales. Registered > no. 3080780. VAT no. GB 603 8808 40-00 > ************************************************************************************** > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users