CBR/Drools configuration problem
tmarks Nov 23, 2010 6:06 PMI am trying to set up my first ContextBaseRouting action using Drools.
I have tried many things, but keep getting exceptions as if pattern was not matched.
Feedback appreciated.
Here is the exception.
2010-11-24 02:27:00,255 DEBUG [org.jboss.soa.esb.listeners.message.ActionProcessingPipeline] Unexpected exception caught while processing the action pipeline
org.jboss.soa.esb.actions.ActionProcessingException: org.jboss.soa.esb.services.routing.MessageRouterException: Generation raised the following errors: [7,0]: [ERR 103] Line 7:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in rule[7,9]: [ERR 101] Line 7:9 no viable alternative at input 'XPathLanguage' in rule expander[10,0]: [ERR 101] Line 10:0 no viable alternative at input 'global' in rule expander in rule dsl[14,2]: [ERR 101] Line 14:2 no viable alternative at input 'xpathEquals' in rule expander in rule dsl in rule "hl7-inbound allergy rule using XPATH"
at org.jboss.soa.esb.actions.ContentBasedWiretap.process(ContentBasedWiretap.java:160)
at org.jboss.soa.esb.actions.ContentBasedRouter.process(ContentBasedRouter.java:58)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:634)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:588)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.process(ActionProcessingPipeline.java:419) at org.jboss.soa.esb.listeners.message.MessageAwareListener$TransactionalRunner.run(MessageAwareListener.java:540)
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: Generation raised the following errors: [7,0]: [ERR 103] Line 7:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in rule[7,9]: [ERR 101] Line 7:9 no viable alternative at input 'XPathLanguage' in rule expander[10,0]: [ERR 101] Line 10:0 no viable alternative at input 'global' in rule expander in rule dsl[14,2]: [ERR 101] Line 14:2 no viable alternative at input 'xpathEquals' in rule expander in rule dsl in rule "hl7-inbound allergy rule using XPATH"
at org.jboss.internal.soa.esb.services.routing.cbr.JBossRulesRouter.route(JBossRulesRouter.java:141)
at org.jboss.internal.soa.esb.services.routing.cbr.JBossRulesRouter.route(JBossRulesRouter.java:120)
at org.jboss.soa.esb.actions.ContentBasedWiretap.executeRules(ContentBasedWiretap.java:172)
at org.jboss.soa.esb.actions.ContentBasedWiretap.process(ContentBasedWiretap.java:144)
... 8 more
Caused by: org.jboss.internal.soa.esb.services.rules.RuleServiceException: Generation raised the following errors: [7,0]: [ERR 103] Line 7:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in rule[7,9]: [ERR 101] Line 7:9 no viable alternative at input 'XPathLanguage' in rule expander[10,0]: [ERR 101] Line 10:0 no viable alternative at input 'global' in rule expander in rule dsl[14,2]: [ERR 101] Line 14:2 no viable alternative at input 'xpathEquals' in rule expander in rule dsl in rule "hl7-inbound allergy rule using XPATH"
at org.jboss.internal.soa.esb.services.rules.DroolsRuleBaseHelper.getNewRuleBaseWithPackage(DroolsRuleBaseHelper.java:255)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleBaseHelper.createRuleBaseFromRuleFiles(DroolsRuleBaseHelper.java:135)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleService.getRuleBaseStateForFileBasedRules(DroolsRuleService.java:544)
at org.jboss.internal.soa.esb.services.rules.DroolsRuleService.executeStatelessRules(DroolsRuleService.java:139)
at org.jboss.internal.soa.esb.services.rules.RuleServiceCallHelper.executeStateless(RuleServiceCallHelper.java:168)
at org.jboss.internal.soa.esb.services.rules.RuleServiceCallHelper.executeRulesService(RuleServiceCallHelper.java:160)
at org.jboss.internal.soa.esb.services.routing.cbr.JBossRulesRouter.route(JBossRulesRouter.java:135)
... 11 more
Here is my action from jboss-esb.xml
<action name="ContentBasedRouter" class="org.jboss.soa.esb.actions.ContentBasedRouter">
<property name="cbrAlias" value="Drools"/>
<property name="ruleSet" value="rules-xpath.drl"/>
<property name="ruleLanguage" value="XPathLanguage.dsl"/>"/>
<property name="ruleReload" value="true"/>
<property name="destinations">
<route-to destination-name="allergy" service-category="mycategory" service-name="mycategoryservice" />
</property>
</action>
Here is my rules-xpath.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 "hl7-inbound allergy rule using XPATH"
when
xpathEquals "ADT_A60/MSH/MSH.9/MSG.3", "ADT A60"
then
Log : "Allergy";
Destination : "allergy";
end
The message body contains XML that looks like this...
<ADT_A60>
<MSH>
<MSH.1>|</MSH.1>
<MSH.2>^~\&</MSH.2>
<MSH.3>
<HD.1>TestSendingSystem</HD.1>
</MSH.3>
<MSH.7>
<TS.1>200701011539</TS.1>
</MSH.7>
<MSH.9>
<MSG.1>ADT</MSG.1>
<MSG.2>A60</MSG.2>
<MSG.3>ADT A60</MSG.3>
</MSH.9>
<MSH.12>2.5.1</MSH.12>
<MSH.13>123</MSH.13>
</MSH>
<PID>
<PID.3>
<CX.1>123456</CX.1>
</PID.3>
<PID.5>
<XPN.1>
<FN.1>Doe</FN.1>
</XPN.1>
<XPN.2>John</XPN.2>
</PID.5>
</PID>
</ADT_A60>