[CBR Error] Duplicate declaration for variable 'msg' when us
cedricrathgeb Apr 28, 2009 4:28 AMHi all,
I've got an error when writing a Rule using XPath for the ContentBasedRouter.
The problem arise only with the "and" operator (there is no problem with the "or" operator).
Here is the content of the DRL file :
package com.jboss.soa.esb.routing.cbr #list any import classes here. import org.jboss.soa.esb.message.Message; import org.jboss.soa.esb.message.format.MessageType; expander XPathLanguage.dsl #declare any global variables here global java.util.List destinations; rule "CARE" when (xpathEquals "/Paiement/Membre/CodeApplication", "90") and (xpathEquals "/Paiement/Entete/TypeTransaction", "002") then Log : "Going CARE"; Destination : "CARE"; end rule "SAPFSCDCIRVIE" when xpathEquals "/Paiement/Membre/CodeApplication", "32" then Log : "Going SAPFSCDCIRVIE"; Destination : "SAPFSCDCIRVIE"; end
And the ContentBasedRouter action in JBossESB :
<action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="content-based-router"> <property name="ruleSet" value="drools-routing-rules-using-xpath-and.drl"/> <property name="ruleLanguage" value="XPathLanguage.dsl"/> <property name="ruleReload" value="true"/> <property name="destinations"> <route-to destination-name="SAPFSCDCIRVIE" service-category="ESB_PF" service-name="Service_PF_SAPFSCDCIRVIE"/> <route-to destination-name="CARE" service-category="ESB_PF" service-name="Service_PF_CARE"/> </property> </action>
Does anyone have an idea on how to create more complex Rules using XPath ?
Should I switch to Rules working on Java Objects ?
I tried the "LISP" syntax with the prefixed operator and I have the same behavior...
Here is the stack trace :
org.jboss.soa.esb.actions.ActionProcessingException: org.jboss.soa.esb.services.routing.MessageRouterException: Duplicate declaration for variable 'msg' in the rule 'CARE' : [Rule name='CARE']
at org.jboss.soa.esb.actions.ContentBasedWiretap.process(ContentBasedWiretap.java:156)
at org.jboss.soa.esb.actions.ContentBasedRouter.process(ContentBasedRouter.java:58)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:633)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:585)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.process(ActionProcessingPipeline.java:419)
at org.jboss.soa.esb.listeners.message.MessageAwareListener$TransactionalRunner.run(MessageAwareListener.java:548)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.jboss.soa.esb.services.routing.MessageRouterException: Duplicate declaration for variable 'msg' in the rule 'CARE' : [Rule name='CARE']
at org.jboss.internal.soa.esb.services.routing.cbr.JBossRulesRouter.route(JBossRulesRouter.java:128)
at org.jboss.soa.esb.actions.ContentBasedWiretap.executeRules(ContentBasedWiretap.java:168)
at org.jboss.soa.esb.actions.ContentBasedWiretap.process(ContentBasedWiretap.java:140)
... 8 more
Caused by: org.jboss.internal.soa.esb.services.rules.RuleServiceException: Duplicate declaration for variable 'msg' in the rule 'CARE' : [Rule name='CARE']
at org.jboss.internal.soa.esb.services.rules.DroolsRuleBaseHelper.getNewRuleBaseWithPackage(DroolsRuleBaseHelper.java:272)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleBaseHelper.createRuleBaseFromRuleFiles(DroolsRuleBaseHelper.java:134)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleService.getRuleBaseForFileBasedRules(DroolsRuleService.java:387)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleService.executeStatelessRules(DroolsRuleService.java:116)
at org.jboss.internal.soa.esb.services.rules.RuleServiceCallHelper.executeRulesService(RuleServiceCallHelper.java:137)
at org.jboss.internal.soa.esb.services.routing.cbr.JBossRulesRouter.route(JBossRulesRouter.java:123)
... 10 more
Caused by: org.drools.rule.InvalidRulePackage: Duplicate declaration for variable 'msg' in the rule 'CARE' : [Rule name='CARE']
at org.drools.rule.Package.checkValidity(Package.java:483)
at org.drools.common.AbstractRuleBase.addPackage(AbstractRuleBase.java:418)
at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:385)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleBaseHelper.getNewRuleBaseWithPackage(DroolsRuleBaseHelper.java:267)
... 15 more