[jboss-jira] [JBoss JIRA] (DROOLS-11) ArrayIndexOutOfBoundsException when calling a method with more than two varargs parameters

Andreas Bentele (JIRA) jira-events at lists.jboss.org
Tue Jan 8 02:52:08 EST 2013


Andreas Bentele created DROOLS-11:
-------------------------------------

             Summary: ArrayIndexOutOfBoundsException when calling a method with more than two varargs parameters
                 Key: DROOLS-11
                 URL: https://issues.jboss.org/browse/DROOLS-11
             Project: Drools
          Issue Type: Bug
      Security Level: Public (Everyone can see)
            Reporter: Andreas Bentele
            Assignee: Mark Proctor


I have a rule which uses a Java Interface ILogService with Varargs Parameter. When the rule is evaluated, an ArrayIndexOutOfBoundsException is thrown within MVEL2 code which evaluates the varargs parameters. The MVEL2 code works with two varargs parameters, but not with more than two varargs parameters.

Drools Version: 5.5.0.Final


{code}
// Java Interface ILogService with varargs
public interface ILogService {
	public void debug(String logMessage, Object... arg);
	...
}

// Global definition ILogService
global ILogService log;

rule "..."
	ruleflow-group  " ... "
	no-loop  true
	salience  2
	when
    	...
	then
		log.debug("{} {} {}", operation.getOrderNumber(), operation.getOperationNumber(), Long.valueOf($operationId));
end
{code}

* Breakpoint in org.mvel2.optimizers.impl.refl.nodes.MethodAccessor.executeAll(Object, VariableResolverFactory, Method), Line 149:
{code}
for (int i = 0; i < vararg.length; i++) vararg[i] = parms[parms.length - length + i].getValue(ctx, vars);
{code}
* Debugging of this context:
{code}
vararg.length = 3
parms.length = 4
length = 2
i = 0 => vararg[0] = parms[4-2+0].getValue(ctx, vars);
i = 1 => vararg[1] = parms[4-2+1].getValue(ctx, vars);
i = 2 => vararg[2] = parms[4-2+2].getValue(ctx, vars); => vararg[2] = parms[4].getValue(ctx, vars); => java.lang.ArrayIndexOutOfBoundsException: 4 (because params is an array of length 4 and maximum index 3.
{code}

Complete Stacktrace:
{code}
MethodAccessor.executeAll(Object, VariableResolverFactory, Method) line: 149	
MethodAccessor.getValue(Object, Object, VariableResolverFactory) line: 48	
VariableAccessor.getValue(Object, Object, VariableResolverFactory) line: 37	
ASTNode.getReducedValueAccelerated(Object, Object, VariableResolverFactory) line: 108	
MVELRuntime.execute(boolean, CompiledExpression, Object, VariableResolverFactory) line: 85	
CompiledExpression.getDirectValue(Object, VariableResolverFactory) line: 123	
CompiledExpression.getValue(Object, VariableResolverFactory) line: 119	
MVEL.executeExpression(Object, Object, VariableResolverFactory) line: 930	
MVELConsequence.evaluate(KnowledgeHelper, WorkingMemory) line: 104	
DefaultAgenda.fireActivation(Activation) line: 1287	
DefaultAgenda.fireNextItem(AgendaFilter) line: 1221	
DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1456	
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 710	
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 674	
StatefulKnowledgeSessionImpl.fireAllRules() line: 230	
...
{code}


I tried to create a simple test case to reproduce it, but the test case always worked - no Exception. but there was also another Stacktrace when stopping at a breakpoint in the LogService:
{code}
LogService.info(String, Object...) line: 60	
Rule_Hello_World_4df945f15bc043ef85d8e1317cd461f1.defaultConsequence(KnowledgeHelper, ILogService) line: 7	
Rule_Hello_World_4df945f15bc043ef85d8e1317cd461f1DefaultConsequenceInvokerGenerated.evaluate(KnowledgeHelper, WorkingMemory) line: not available	
Rule_Hello_World_4df945f15bc043ef85d8e1317cd461f1DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: not available	
DefaultAgenda.fireActivation(Activation) line: 1287	
DefaultAgenda.fireNextItem(AgendaFilter) line: 1221	
DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1456	
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list