{"record":{"id":"452b467dcfab3946","repo":"pentaho/pentaho-kettle","slug":"bounds-of-this-rule-are-not-numeric-lowerbound","errorCode":null,"errorMessage":"Bounds of this rule are not numeric: lowerBound=","messagePattern":"Bounds of this rule are not numeric: lowerBound=","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/numberrange/NumberRangeDialog.java","lineNumber":361,"sourceCode":"\n    input.setOutputField( outputFieldControl.getText() );\n\n    int count = rulesControl.nrNonEmpty();\n    for ( int i = 0; i < count; i++ ) {\n      TableItem item = rulesControl.getNonEmpty( i );\n      String lowerBoundStr =\n        Utils.isEmpty( item.getText( 1 ) ) ? String.valueOf( -Double.MAX_VALUE ) : item.getText( 1 );\n      String upperBoundStr =\n        Utils.isEmpty( item.getText( 2 ) ) ? String.valueOf( Double.MAX_VALUE ) : item.getText( 2 );\n      String value = item.getText( 3 );\n\n      try {\n        double lowerBound = Double.parseDouble( lowerBoundStr );\n        double upperBound = Double.parseDouble( upperBoundStr );\n\n        input.addRule( lowerBound, upperBound, value );\n      } catch ( NumberFormatException e ) {\n        throw new IllegalArgumentException( \"Bounds of this rule are not numeric: lowerBound=\"\n          + lowerBoundStr + \", upperBound=\" + upperBoundStr + \", value=\" + value, e );\n      }\n    }\n\n    dispose();\n  }\n\n  private void loadComboOptions() {\n    try {\n      String fieldvalue = null;\n      if ( inputFieldControl.getText() != null ) {\n        fieldvalue = inputFieldControl.getText();\n      }\n      RowMetaInterface r = transMeta.getPrevStepFields( stepname );\n      if ( r != null ) {\n        inputFieldControl.setItems( r.getFieldNames() );\n      }\n      if ( fieldvalue != null ) {","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/numberrange/NumberRangeDialog.java#L343-L379","documentation":"Thrown from NumberRangeDialog.ok() when parsing the lower or upper bound of a number range rule fails with NumberFormatException; the dialog rethrows it as IllegalArgumentException with both bound strings. addRule requires numeric double bounds.","triggerScenarios":"Clicking OK on the Number Range step dialog after entering a non-numeric value (e.g. '10x', '', locale-formatted '1,5') into the lower or upper bound field of a rule.","commonSituations":"Locale differences (comma vs dot decimal separator), stray spaces or characters pasted into bound fields, or leaving a bound field blank.","solutions":["Enter plain numeric values using dot as decimal separator (e.g. 1.5)","Remove spaces or stray characters from the bound fields","Check the JVM/system locale if comma decimals keep failing and use the dot explicitly","Validate the rule table before saving the dialog"],"exampleFix":"// before\nlowerBound = \"1,5\"; // comma decimal -> NumberFormatException\n// after\nlowerBound = \"1.5\"; // dot decimal parses as double","handlingStrategy":"validation","validationCode":"try { Double.parseDouble(lower); Double.parseDouble(upper); } catch (NumberFormatException e) { throw new IllegalArgumentException(\"Bounds must be numeric with dot decimal: \" + lower + \", \" + upper); }","typeGuard":"boolean isNumeric(String s) { if (s == null || s.isBlank()) return false; try { Double.parseDouble(s.trim()); return true; } catch (NumberFormatException e) { return false; } }","tryCatchPattern":"try { ok(); } catch (IllegalArgumentException e) { showInvalidBoundsDialog(e.getMessage()); }","preventionTips":["Enter dot-decimal numbers regardless of locale","Trim pasted values and check for stray characters","Never leave bound fields empty"],"tags":["pentaho-kettle","swt-dialog","number-format","numberformatexception"],"backgroundTag":"invalid-argument-format","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}