[jboss-jira] [JBoss JIRA] (DROOLS-76) Incorrect parsing of negative integers in decision tables resulting in NumberFormatException

Edson Tirelli (JIRA) jira-events at lists.jboss.org
Tue Mar 12 14:22:41 EDT 2013


     [ https://issues.jboss.org/browse/DROOLS-76?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Edson Tirelli resolved DROOLS-76.
---------------------------------

         Assignee: Edson Tirelli  (was: Mark Proctor)
    Fix Version/s: 6.0.0.Alpha1
       Resolution: Done


Thank you for reporting and providing test case. Fixed.
                
> Incorrect parsing of negative integers in decision tables resulting in NumberFormatException
> --------------------------------------------------------------------------------------------
>
>                 Key: DROOLS-76
>                 URL: https://issues.jboss.org/browse/DROOLS-76
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 5.5
>            Reporter: Syargey Z
>            Assignee: Edson Tirelli
>             Fix For: 6.0.0.Alpha1
>
>         Attachments: DroolsNegIntBug.zip
>
>
> Since Drools 5.5.0 negative integers parsing in decision tables causes NumberFormatException.
> The source code of project is attached.
> The stack trace:
> java.lang.NumberFormatException: For input string: "-1.0"
> 	at java.lang.NumberFormatException.forInputString(Unknown Source)
> 	at java.lang.Integer.parseInt(Unknown Source)
> 	at java.lang.Integer.parseInt(Unknown Source)
> 	at org.drools.base.FieldFactory.getFieldValue(FieldFactory.java:142)
> 	at org.drools.rule.builder.PatternBuilder.getFieldValue(PatternBuilder.java:1389)
> 	at org.drools.rule.builder.PatternBuilder.addConstraintToPattern(PatternBuilder.java:765)
> 	at org.drools.rule.builder.PatternBuilder.addConstraintToPattern(PatternBuilder.java:736)
> 	at org.drools.rule.builder.PatternBuilder.buildRelationalExpression(PatternBuilder.java:721)
> 	at org.drools.rule.builder.PatternBuilder.buildExpression(PatternBuilder.java:673)
> 	at org.drools.rule.builder.PatternBuilder.buildCcdDescr(PatternBuilder.java:657)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:629)
> 	at org.drools.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternBuilder.java:477)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:302)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:123)
> 	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:67)
> 	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:84)
> 	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2830)
> 	at org.drools.compiler.PackageBuilder.compileRules(PackageBuilder.java:970)
> 	at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:879)
> 	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:871)
> 	at org.drools.compiler.PackageBuilder.addPackageFromDecisionTable(PackageBuilder.java:447)
> 	at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:711)
> 	at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:51)
> 	at com.sample.DecisionTableTest.readKnowledgeBase(DecisionTableTest.java:51)
> 	at com.sample.DecisionTableTest.main(DecisionTableTest.java:28)
> java.lang.NumberFormatException: For input string: "-1.0"
> 	at java.lang.NumberFormatException.forInputString(Unknown Source)
> 	at java.lang.Integer.parseInt(Unknown Source)
> 	at java.lang.Integer.parseInt(Unknown Source)
> 	at org.mvel2.conversion.IntegerCH$4.convert(IntegerCH.java:80)
> 	at org.mvel2.conversion.IntegerCH.convertFrom(IntegerCH.java:41)
> 	at org.mvel2.DataConversion.convert(DataConversion.java:129)
> 	at org.mvel2.ast.BinaryOperation.<init>(BinaryOperation.java:76)
> 	at org.mvel2.util.CompilerTools.finalizePayload(CompilerTools.java:118)
> 	at org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:287)
> 	at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:62)
> 	at org.mvel2.MVEL.compileExpression(MVEL.java:810)
> 	at org.drools.base.mvel.MVELCompilationUnit.compile(MVELCompilationUnit.java:435)
> 	at org.drools.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)
> 	at org.drools.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:206)
> 	at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:190)
> 	at org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)
> 	at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)
> 	at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
> 	at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)
> 	at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
> 	at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
> 	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)
> 	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:311)
> 	at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)
> 	at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:847)
> 	at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:269)
> 	at com.sample.DecisionTableTest.main(DecisionTableTest.java:35)
> The problem exists in org.drools.decisiontable.parser.xls.ExcelParser:
> {code:lang=java}
>                 	if (cell.getType() == CellType.NUMBER) {
>                 		NumberCell nc = (NumberCell) cell; 
>                 		num = nc.getValue();
>                 	}                	
>                 	if ( Math.abs(num) - Math.ceil(num) != 0 ) {
>                 		newCell(listeners, i, cellNum, String.valueOf(num), DataListener.NON_MERGED );	
>                 	} else {
>                         newCell( listeners,
>                                 i,
>                                 cellNum,
>                                 cell.getContents(),
>                                 DataListener.NON_MERGED );               		
>                 	}
> {code}
> The condition "Math.abs(-1.0) - Math.ceil(-1.0) != 0" is true, so a cell with String.valueOf(-1.0) is created, resulting to: java.lang.NumberFormatException: For input string: "-1.0"
> The error is not reproduced with Drools 5.3.0

--
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