[rules-users] Need help to call method with input parameter and return type

Sanjib Karmakar sanjibk at skytechsolutions.co.in
Tue Aug 3 03:16:56 EDT 2010


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 at n3.nabble.com> 
08/03/2010 11:08 AM

To
Sanjib Karmakar <sanjibk at 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-method-with-input-parameter-and-return-type-tp1018058p1018058.html

> 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-method-with-input-parameter-and-return-type-tp1018058p1018143.html 

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-method-with-input-parameter-and-return-type-tp1018058p1018292.html
Sent from the Drools - User mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100803/2497b61b/attachment.html 


More information about the rules-users mailing list