pentaho/pentaho-kettle · error · KettleException

TransformClassBase.Exception.UnableToFindInfoRowSetForStep

Error message

TransformClassBase.Exception.UnableToFindInfoRowSetForStep

What it means

Thrown by TransformClassBase.findInfoRowSet(tag) when the tag resolved to a step name but findInputRowSet(stepname) returned null, i.e. no info RowSet exists for that step at runtime. The mapping exists but the corresponding input rowset is not available in the running transformation.

Solutions

  1. Verify the mapped step name still exists and is spelled exactly the same in the transformation.
  2. Reconnect the info step hop so an input RowSet is created for this step.
  3. Re-open the UDJC step dialog and re-select the info step to refresh the stored mapping.

Example fix

// before: mapping points to a renamed step
findInfoRowSet("lookupStream"); // step renamed to 'Lookup Stream'
// after: update the info mapping to the new step name
addInfoSource("lookupStream", "Lookup Stream");
Defensive patterns

Strategy: validation

Validate before calling

// after resolving stepname from the tag, confirm the hop exists in the transformation metadata
String stepname = data.infoMap.get(tag); if (stepname == null || transMeta.findStep(stepname) == null) { /* fix mapping */ }

Type guard

boolean infoStepExists(String stepname) { return stepname != null && getTransMeta().findStep(stepname) != null; }

Try / catch

try { RowSet rs = findInfoRowSet(tag); ... } catch (KettleException e) { logError("Info RowSet unavailable for step mapped by tag " + tag, e); throw e; }

Prevention

When it happens

Trigger: findInfoRowSet("tag") where data.infoMap maps the tag to a step name that has no active input rowset — e.g. the info step is not actually connected, is not running, or its name changed after the mapping was stored.

Common situations: Step name mismatch after renaming a step in Spoon while the stored mapping kept the old name; the info step is disabled or fails to start; running the transformation standalone without the info step's transformation scope.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/TransformClassBase.java:580

  public String getParameter( String tag ) {
    if ( tag == null ) {
      return null;
    }
    return parent.environmentSubstitute( data.parameterMap.get( tag ) );
  }

  public RowSet findInfoRowSet( String tag ) throws KettleException {
    if ( tag == null ) {
      return null;
    }
    String stepname = data.infoMap.get( tag );
    if ( Utils.isEmpty( stepname ) ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransformClassBase.Exception.UnableToFindInfoStepNameForTag", tag ) );
    }
    RowSet rowSet = findInputRowSet( stepname );
    if ( rowSet == null ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransformClassBase.Exception.UnableToFindInfoRowSetForStep", stepname ) );
    }
    return rowSet;
  }

  public RowSet findTargetRowSet( String tag ) throws KettleException {
    if ( tag == null ) {
      return null;
    }
    String stepname = data.targetMap.get( tag );
    if ( Utils.isEmpty( stepname ) ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransformClassBase.Exception.UnableToFindTargetStepNameForTag", tag ) );
    }
    RowSet rowSet = findOutputRowSet( stepname );
    if ( rowSet == null ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransformClassBase.Exception.UnableToFindTargetRowSetForStep", stepname ) );

View on GitHub (pinned to f3058517a1)