{"record":{"id":"126e1e833206190e","repo":"pentaho/pentaho-kettle","slug":"transformclassbase-exception-unabletofindinfostepnamefortag","errorCode":null,"errorMessage":"TransformClassBase.Exception.UnableToFindInfoStepNameForTag","messagePattern":"TransformClassBase\\.Exception\\.UnableToFindInfoStepNameForTag","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/TransformClassBase.java","lineNumber":575,"sourceCode":"    }\n\n    return ioMeta;\n  }\n\n  public String getParameter( String tag ) {\n    if ( tag == null ) {\n      return null;\n    }\n    return parent.environmentSubstitute( data.parameterMap.get( tag ) );\n  }\n\n  public RowSet findInfoRowSet( String tag ) throws KettleException {\n    if ( tag == null ) {\n      return null;\n    }\n    String stepname = data.infoMap.get( tag );\n    if ( Utils.isEmpty( stepname ) ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransformClassBase.Exception.UnableToFindInfoStepNameForTag\", tag ) );\n    }\n    RowSet rowSet = findInputRowSet( stepname );\n    if ( rowSet == null ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransformClassBase.Exception.UnableToFindInfoRowSetForStep\", stepname ) );\n    }\n    return rowSet;\n  }\n\n  public RowSet findTargetRowSet( String tag ) throws KettleException {\n    if ( tag == null ) {\n      return null;\n    }\n    String stepname = data.targetMap.get( tag );\n    if ( Utils.isEmpty( stepname ) ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransformClassBase.Exception.UnableToFindTargetStepNameForTag\", tag ) );","sourceCodeStart":557,"sourceCodeEnd":593,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/TransformClassBase.java#L557-L593","documentation":"Thrown by TransformClassBase.findInfoRowSet(tag) in the User Defined Java Class (UDJC) step when the given info tag is not mapped to any step name in data.infoMap. The tag must have been declared via addInfoSource or defined in the step's info mappings; Kettle throws because it cannot resolve which step supplies the info stream.","triggerScenarios":"Calling findInfoRowSet(\"myTag\") in UDJC script code with a tag that was never registered via Info step mapping (addInfoSource/addStepInfoFields or the step dialog), or after the mapping was renamed/removed.","commonSituations":"Typo in the tag string; user removed the info hop in Spoon but the script still references the old tag; copying a UDJC step without re-adding the info step mapping; upgrading transformations where info tags were renamed.","solutions":["Add the tag as an info source in the UDJC step dialog (or call addInfoSource/addStepInfoFields) so the tag maps to an actual step name.","Fix the tag string passed to findInfoRowSet to exactly match a registered tag.","Check the step's 'Info step' mappings in the transformation to confirm the hop from the info step still exists."],"exampleFix":"// before\nRowSet rs = findInfoRowSet(\"lookupStream\"); // tag never declared\n// after (in step meta setup / dialog)\naddInfoSource(\"lookupStream\", \"Lookup Step\");\nRowSet rs = findInfoRowSet(\"lookupStream\");","handlingStrategy":"validation","validationCode":"// in UDJC script, before lookup\nif (tag != null) { Object o = data.infoMap.get(tag); if (o == null || o.toString().isEmpty()) throw new KettleException(\"Tag not mapped: \" + tag); }","typeGuard":"boolean isMapped(String tag) { return tag != null && data.infoMap.get(tag) != null && !data.infoMap.get(tag).toString().isEmpty(); }","tryCatchPattern":"try { RowSet rs = findInfoRowSet(tag); ... } catch (KettleException e) { logError(\"Info tag not mapped: \" + tag, e); throw e; }","preventionTips":["Define all info tags in the UDJC dialog before scripting against them","Keep tag constants in one place to avoid typos","Re-verify info mappings after renaming steps in Spoon"],"tags":["kettle","udjc","info-stream","rowset"],"backgroundTag":"resource-not-found","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"}