pentaho/pentaho-kettle · error · IllegalArgumentException

Bounds of this rule are not numeric: lowerBound=

Error message

Bounds of this rule are not numeric: lowerBound=

What it means

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.

Solutions

  1. Enter plain numeric values using dot as decimal separator (e.g. 1.5)
  2. Remove spaces or stray characters from the bound fields
  3. Check the JVM/system locale if comma decimals keep failing and use the dot explicitly
  4. Validate the rule table before saving the dialog

Example fix

// before
lowerBound = "1,5"; // comma decimal -> NumberFormatException
// after
lowerBound = "1.5"; // dot decimal parses as double
Defensive patterns

Strategy: validation

Validate before calling

try { Double.parseDouble(lower); Double.parseDouble(upper); } catch (NumberFormatException e) { throw new IllegalArgumentException("Bounds must be numeric with dot decimal: " + lower + ", " + upper); }

Type guard

boolean isNumeric(String s) { if (s == null || s.isBlank()) return false; try { Double.parseDouble(s.trim()); return true; } catch (NumberFormatException e) { return false; } }

Try / catch

try { ok(); } catch (IllegalArgumentException e) { showInvalidBoundsDialog(e.getMessage()); }

Prevention

When it happens

Trigger: 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.

Common situations: Locale differences (comma vs dot decimal separator), stray spaces or characters pasted into bound fields, or leaving a bound field blank.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/452b467dcfab3946. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/numberrange/NumberRangeDialog.java:361

    input.setOutputField( outputFieldControl.getText() );

    int count = rulesControl.nrNonEmpty();
    for ( int i = 0; i < count; i++ ) {
      TableItem item = rulesControl.getNonEmpty( i );
      String lowerBoundStr =
        Utils.isEmpty( item.getText( 1 ) ) ? String.valueOf( -Double.MAX_VALUE ) : item.getText( 1 );
      String upperBoundStr =
        Utils.isEmpty( item.getText( 2 ) ) ? String.valueOf( Double.MAX_VALUE ) : item.getText( 2 );
      String value = item.getText( 3 );

      try {
        double lowerBound = Double.parseDouble( lowerBoundStr );
        double upperBound = Double.parseDouble( upperBoundStr );

        input.addRule( lowerBound, upperBound, value );
      } catch ( NumberFormatException e ) {
        throw new IllegalArgumentException( "Bounds of this rule are not numeric: lowerBound="
          + lowerBoundStr + ", upperBound=" + upperBoundStr + ", value=" + value, e );
      }
    }

    dispose();
  }

  private void loadComboOptions() {
    try {
      String fieldvalue = null;
      if ( inputFieldControl.getText() != null ) {
        fieldvalue = inputFieldControl.getText();
      }
      RowMetaInterface r = transMeta.getPrevStepFields( stepname );
      if ( r != null ) {
        inputFieldControl.setItems( r.getFieldNames() );
      }
      if ( fieldvalue != null ) {

View on GitHub (pinned to f3058517a1)