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