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 <sanj...@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@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