[jboss-jira] [JBoss JIRA] (DROOLS-76) Incorrect parsing of negative integers in decision tables resulting in NumberFormatException
Syargey Z (JIRA)
jira-events at lists.jboss.org
Tue Mar 12 10:06:42 EDT 2013
[ https://issues.jboss.org/browse/DROOLS-76?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Syargey Z updated DROOLS-76:
----------------------------
Description:
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
> 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: Mark Proctor
>
> 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