Hi all!!
Im having some problems with calling functions one from another in .drl
Here is some code snippet:
#created on: 2007.04.03
*
package* hr.combis.unimsg.ruleengine.rules.message
#list any import classes here.
*
import* javax.mail.internet.MimeMessage;
*
import* javax.mail.internet.InternetAddress;
*
import* javax.mail.Message;
*
import* javax.mail.Header;
*
import* javax.mail.Multipart;
*
import* javax.mail.Part;
*
import* java.util.Enumeration;
*
import* java.lang.String;
*
import* java.lang.Object;
*
import* java.lang.Integer;
#declare any global variables here
#global IMessageService messageService;
*
rule* "Initial rule"
*when
*
#conditions
msg : MimeMessage( )
*then*
#actions
drools.setFocus("Content group");
*
end
*
*
rule* "Header parsing rule"
*agenda-group* "Header group"
*when
*
#conditions
msg : MimeMessage( )
*then*
#actions
*if* (msg.getContent() != *null* && msg.getAllHeaders() != *null*){
System.out.println("TODO: header processing");
}
*
end
*
*
rule* "Content parsing rule"
*agenda-group* "Content group"
*when
*
#conditions
msg : MimeMessage( )
*then*
#actions
*if* (msg.getContent() != *null*){
*if* (msg.getContent() *instanceof* Multipart){
System.out.println("mail je multipart");
Object body = msg.getContent();
processMultipart((Multipart) body);
}*else*{
System.out.println("mail je singlepart");
singlePart(msg);
}
}
drools.setFocus("Header group");
*
end
*
*
function* *void* singlePart(Part p) {
String fileName = p.getFileName( );
String disposition = p.getDisposition( );
String contentType = p.getContentType( );
*if* (contentType.toLowerCase( ).startsWith("multipart/")) {
System.out.println("Part ima svoje partove");
ProcessMultipart.processMultipart((Multipart) p.getContent( ) );
}
p.writeTo(System.out);
}
*
function* *void* processMultipart(Multipart mp){
System.out.println("procesiram multipart");
*for* (*int* i = 0; i < mp.getCount(); i++){
Part part = mp.getBodyPart(i);
System.out.println("Procesiram part: " + i);
SinglePart.singlePart(part);
}
}
When i assert in working memory multipart message , the first is being
called processMultipart() method, which then calls singlePart() method for
each part and that works just fine. But, when singlePart needs to call
processMultipart() again (thats just the way javamail api works), everything
crashes with no specific explanation. Here is the part of log:
ERROR 07 04 2007 12:36:05,031 - Bad error
com.ibm.ejs.container.UnknownLocalException:
at org.codehaus.janino.Parser.parseAdditiveExpression(Parser.java)
at org.codehaus.janino.Parser.parseShiftExpression(Parser.java)
at org.codehaus.janino.Parser.parseRelationalExpression(Parser.java)
at org.codehaus.janino.Parser.parseEqualityExpression(Parser.java)
at org.codehaus.janino.Parser.parseAndExpression(Parser.java)
at org.codehaus.janino.Parser.parseExclusiveOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseInclusiveOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalAndExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalExpression(Parser.java)
at org.codehaus.janino.Parser.parseAssignmentExpression(Parser.java)
at org.codehaus.janino.Parser.parseExpression(Parser.java)
at org.codehaus.janino.Parser.parsePrimary(Parser.java)
at org.codehaus.janino.Parser.parseUnaryExpression(Parser.java)
at org.codehaus.janino.Parser.parseMultiplicativeExpression(Parser.java)
at org.codehaus.janino.Parser.parseAdditiveExpression(Parser.java)
at org.codehaus.janino.Parser.parseShiftExpression(Parser.java)
at org.codehaus.janino.Parser.parseRelationalExpression(Parser.java)
at org.codehaus.janino.Parser.parseEqualityExpression(Parser.java)
at org.codehaus.janino.Parser.parseAndExpression(Parser.java)
at org.codehaus.janino.Parser.parseExclusiveOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseInclusiveOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalAndExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalOrExpression(Parser.java)
at org.codehaus.janino.Parser.parseConditionalExpression(Parser.java)
at org.codehaus.janino.Parser.parseAssignmentExpression(Parser.java)
at org.codehaus.janino.Parser.parseExpression(Parser.java)
at org.codehaus.janino.Parser.parseArgumentList(Parser.java)
at org.codehaus.janino.Parser.parseArguments(Parser.java)
at org.codehaus.janino.Parser.parsePrimary(Parser.java)
at org.codehaus.janino.Parser.parseUnaryExpression(Parser.java)
.......
Please, help. Thnx