[rules-users] Need help to call method with input parameter and return type
Wolfgang Laun
wolfgang.laun at gmail.com
Tue Aug 3 01:36:26 EDT 2010
ksession hasn't been assigned an object when you call ksession.insert
in RuleHandler.java:61.
-W
On 3 August 2010 06:31, Sanjib Karmakar <sanjibk at skytechsolutions.co.in> wrote:
>
> Hi
>
> I am new in drools. In my project I have to call the method define in xml
> rule file using java
>
> ## Following is my rule xml
>
> <?xml version="1.0" encoding="UTF-8"?>
> <package name="com.sample"
> xmlns="http://drools.org/drools-5.0"
> xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
> xs:schemaLocation="http://drools.org/drools-5.0 drools.org/drools-5.0.xsd">
> <import name="com.skyfusion.dto.FlifoDTO" />
>
> <global identifier="flifoDTO" type="com.skyfusion.dto.FlifoDTO" />
>
> <function return-type="FlifoDTO" name="show">
> <parameter identifier="appId" type="FlifoDTO.appId"/>
> <body>
> System.out.println("appId " + appId);
> if(appId==2)
> {
> flifoDTO.setChnlName("SKYFUSION.UNI.SIMU.TXT.QUEUE");
> }
> if(appId==3)
> {
> flifoDTO.setChnlName("SKYFUSION.BASE.MSGFLTR.TXT.TOPIC");
> }
> </body>
> </function>
>
> <rule name="Find Channel">
> <lhs>
> <pattern identifier="flDTO" object-type="FlifoDTO" >
> <field-constraint field-name="flifoType">
> <qualified-identifier-restriction
> evaluator="==">FlifoDTO.FLIFO</qualified-identifier-restriction>
> </field-constraint>
> <field-binding field-name="appId" identifier="ruleDTO"/>
> </pattern>
> </lhs>
> <rhs>
> //System.out.println(ruleDTO);
> System.out.println("Find Channel");
> //show(appId);
> </rhs>
> </rule>
>
> </package>
>
> ## Following is my DTO class
>
> package com.skyfusion.dto;
>
> public class FlifoDTO
> {
> public static final int FLIFO = 1;
>
> private String ruleId;
> private int appId;
> private int flifoType;
> private String chnlName;
>
> public FlifoDTO() {
> }
> public int getAppId() {
> return appId;
> }
> public void setAppId(int appId) {
> this.appId = appId;
> }
> public String getChnlName() {
> return chnlName;
> }
> public void setChnlName(String chnlName) {
> this.chnlName = chnlName;
> }
> public void setRuleId(String ruleId) {
> this.ruleId = ruleId;
> }
> public String getRuleId() {
> return ruleId;
> }
> public int getFlifoType() {
> return flifoType;
> }
> public void setFlifoType(int flifoType) {
> this.flifoType = flifoType;
> }
> }
>
> ## Following is my rule execution class
>
> package com.skyfusion.rule.handler;
>
> import org.drools.KnowledgeBase;
> import org.drools.KnowledgeBaseFactory;
> import org.drools.builder.KnowledgeBuilder;
> import org.drools.builder.KnowledgeBuilderError;
> import org.drools.builder.KnowledgeBuilderErrors;
> import org.drools.builder.KnowledgeBuilderFactory;
> import org.drools.builder.ResourceType;
> import org.drools.io.ResourceFactory;
> import org.drools.runtime.StatefulKnowledgeSession;
>
> import com.skyfusion.dto.FlifoDTO;
>
> public class RuleHandler {
>
> private StatefulKnowledgeSession ksession = null;
> private KnowledgeBase kbase = null;
>
> public RuleHandler()
> {
> try {
> // load up the knowledge base
> kbase = readKnowledgeBase();
> ksession = kbase.newStatefulKnowledgeSession();
> } catch (Exception t) {
> t.printStackTrace();
> }
> }
>
> private KnowledgeBase readKnowledgeBase()
> throws Exception
> {
> KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
> kbuilder.add(ResourceFactory.newClassPathResource("fliforule.xml"),
> ResourceType.XDRL);
> KnowledgeBuilderErrors errors = kbuilder.getErrors();
> if (errors.size() > 0) {
> for (KnowledgeBuilderError error: errors) {
> System.out.println(error);
> }
> throw new IllegalArgumentException("Could not parse knowledge.");
> }
> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
> kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
> return kbase;
> }
>
> public FlifoDTO initMessage(String ruleID, FlifoDTO flDTO, int appId, int
> type)
> throws Exception
> {
> FlifoDTO flifoDTO = flDTO;
> try
> {
> flifoDTO.setRuleId(ruleID);
> flifoDTO.setAppId(appId);
> flifoDTO.setFlifoType(type);
> ksession.insert(flifoDTO);
> ksession.fireAllRules();
> }catch(Exception t)
> {
> t.printStackTrace();
> }
> return flifoDTO;
> }
>
> public static void main(String args[]){
> RuleHandler rh = new RuleHandler();
> FlifoDTO flifoDTO = new FlifoDTO();
> try {
> flifoDTO = rh.initMessage("Find Channel",flifoDTO,2,1);
> } catch (Exception e) {
> e.printStackTrace();
> }
> System.out.println(flifoDTO.getChnlName());
> }
> }
>
> ## I am getting the following exception
>
> java.lang.IllegalArgumentException: Could not parse knowledge.
> at
> com.skyfusion.rule.handler.RuleHandler.readKnowledgeBase(RuleHandler.java:45)
> at com.skyfusion.rule.handler.RuleHandler.<init>(RuleHandler.java:28)
> at com.skyfusion.rule.handler.RuleHandler.main(RuleHandler.java:71)
> java.lang.NullPointerException
> at com.skyfusion.rule.handler.RuleHandler.initMessage(RuleHandler.java:61)
> at com.skyfusion.rule.handler.RuleHandler.main(RuleHandler.java:74)
> (null: 29, 54): schema_reference.4: Failed to read schema document
> 'drools.org/drools-5.0.xsd', because 1) could not find the document; 2) the
> document could not be read; 3) the root element of the document is not
> <xsd:schema>.
> (null: 31, 60): schema_reference.4: Failed to read schema document
> 'drools.org/drools-5.0.xsd', because 1) could not find the document; 2) the
> document could not be read; 3) the root element of the document is not
> <xsd:schema>.
> (null: 34, 7): schema_reference.4: Failed to read schema document
> 'drools.org/drools-5.0.xsd', because 1) could not find the document; 2) the
> document could not be read; 3) the root element of the document is not
> <xsd:schema>.
> Error importing : 'com.sample.Show.show'
> [ show : unable to resolve type while building function
> ]
> [ show : Function Compilation error
> show (line:-2): FlifoDTO.appId cannot be resolved to a type
> show (line:3): flifoDTO cannot be resolved
> show (line:7): flifoDTO cannot be resolved
> ]
> [ show : Function Compilation error
> show (line:-2): FlifoDTO.appId cannot be resolved to a type
> show (line:3): flifoDTO cannot be resolved
> show (line:7): flifoDTO cannot be resolved
> ]
> Rule Compilation error : [Rule name='Find Channel']
> com/sample/Rule_Find_Channel_0.java (2:89) : The import com.sample.Show
> cannot be resolved
>
> Error importing : 'com.sample.Show.show'
> null
>
> ## Please let me know I am missing.
>
> Thanks in advance
>
> --
> View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Need-help-to-call-method-with-input-parameter-and-return-type-tp1018058p1018058.html
> Sent from the Drools - User 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