Hi
at line number 51 of RuleHandler.java following assignment is there
FlifoDTO flifoDTO = flDTO;
this flDTO is comming as parameter of initMessage() which is an instance
of FlifoDTO created in main method.
Regards
Sanjib Karmakar
SkyTech Solutions Pvt. Ltd
Please consider the environment before printing this email.
"Wolfgang Laun-2 [via Drools - Java Rules Engine]"
<ml-node+1018143-743770740-302007(a)n3.nabble.com>
08/03/2010 11:08 AM
To
Sanjib Karmakar <sanjibk(a)skytechsolutions.co.in>
cc
Subject
Re: Need help to call method with input parameter and return type
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 <[hidden email]> 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-met...
Sent from the Drools - User mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/rules-users
View message @
http://drools-java-rules-engine.46999.n3.nabble.com/Need-help-to-call-met...
To unsubscribe from Need help to call method with input parameter and
return type, click here.
--
View this message in context:
http://drools-java-rules-engine.46999.n3.nabble.com/Need-help-to-call-met...
Sent from the Drools - User mailing list archive at
Nabble.com.