{"record":{"id":"466f4fec8de62ef6","repo":"pentaho/pentaho-kettle","slug":"collator-strength-must-be-an-int-between-0-and-3","errorCode":null,"errorMessage":" : Collator strength must be an int between 0 and 3. ","messagePattern":" : Collator strength must be an int between 0 and 3\\. ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java","lineNumber":804,"sourceCode":"   */\n  @Override\n  public int getCollatorStrength() {\n    return collatorStrength;\n  }\n\n  /**\n   * @param collatorStrength\n   *          the collatorStrength to set\n   */\n  @Override\n  public void setCollatorStrength( int collatorStrength ) throws IllegalArgumentException {\n    try {\n      if ( collator != null ) {\n        this.collator.setStrength( collatorStrength );\n        this.collatorStrength = collatorStrength;\n      }\n    } catch ( IllegalArgumentException e ) {\n      throw new IllegalArgumentException( \" : Collator strength must be an int between 0 and 3. \" );\n    }\n  }\n\n  /**\n   * @return the sortedDescending\n   */\n  @Override\n  public boolean isSortedDescending() {\n    return sortedDescending;\n  }\n\n  /**\n   * @param sortedDescending\n   *          the sortedDescending to set\n   */\n  @Override\n  public void setSortedDescending( boolean sortedDescending ) {\n    this.sortedDescending = sortedDescending;","sourceCodeStart":786,"sourceCodeEnd":822,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java#L786-L822","documentation":"ValueMetaBase.setCollatorStrength validates the java.text.Collator strength argument; Collator.setStrength throws IllegalArgumentException for values outside PRIMARY(0), SECONDARY(1), TERTIARY(2), IDENTICAL(3). The library rethrows with a message beginning ' : Collator strength must be an int between 0 and 3.'","triggerScenarios":"Calling setCollatorStrength(n) (or the constructor overload that takes collator strength) with n < 0, n > 3, or on a value meta whose collator is set, with a strength value not accepted by java.text.Collator.","commonSituations":"Passing a strength read from user config without range validation; confusing Collator strength with a different library's 0–5 strength scale; off-by-one when mapping UI options.","solutions":["Pass only Collator.PRIMARY (0), SECONDARY (1), TERTIARY (2), or IDENTICAL (3)","Validate/clamp the configured strength before calling setCollatorStrength","Catch IllegalArgumentException and fall back to the default strength","Confirm the collator itself is non-null — the check only applies when collator != null"],"exampleFix":"// before\nvalueMeta.setCollatorStrength(5); // throws\n// after\nint strength = Math.min(3, Math.max(0, configuredStrength));\nvalueMeta.setCollatorStrength(strength);","handlingStrategy":"validation","validationCode":"// validate before calling\npublic static void setStrengthSafe(ValueMetaBase vm, int strength) {\n  if (strength < 0 || strength > 3) {\n    throw new IllegalArgumentException(\"Collator strength must be 0-3, got \" + strength);\n  }\n  vm.setCollatorStrength(strength);\n}","typeGuard":"static boolean isValidCollatorStrength(Integer s) {\n  return s != null && s >= 0 && s <= 3;\n}","tryCatchPattern":"try {\n  vm.setCollatorStrength(cfgStrength);\n} catch (IllegalArgumentException e) {\n  log.warn(\"Invalid collator strength \" + cfgStrength + \", using TERTIARY\");\n  vm.setCollatorStrength(java.text.Collator.TERTIARY);\n}","preventionTips":["Only use Collator.PRIMARY/SECONDARY/TERTIARY/IDENTICAL constants","Validate user-supplied sort-strength settings at config load time","Don't confuse Collator strength with RuleBasedCollator levels of other libraries","Keep strength settings in a small enum in your own config layer"],"tags":["collator","sorting","argument-range","java"],"backgroundTag":"value-out-of-range","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"}