{"record":{"id":"ad839648d9caf8e5","repo":"pentaho/pentaho-kettle","slug":"javafilter-log-targetstepinvalid","errorCode":"JavaFilter.Log.TargetStepInvalid","errorMessage":"JavaFilter.Log.TargetStepInvalid","messagePattern":"JavaFilter\\.Log\\.TargetStepInvalid","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/javafilter/JavaFilter.java","lineNumber":78,"sourceCode":"\n      setOutputDone();\n      return false;\n    }\n\n    if ( first ) {\n      first = false;\n\n      data.outputRowMeta = getInputRowMeta().clone();\n      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n        metaStore );\n\n      // Cache the position of the RowSet for the output.\n      //\n      if ( data.chosesTargetSteps ) {\n        List<StreamInterface> targetStreams = meta.getStepIOMeta().getTargetStreams();\n        data.trueRowSet = findOutputRowSet( getStepname(), getCopy(), targetStreams.get( 0 ).getStepname(), 0 );\n        if ( data.trueRowSet == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"JavaFilter.Log.TargetStepInvalid\", targetStreams.get( 0 ).getStepname() ) );\n        }\n\n        data.falseRowSet = findOutputRowSet( getStepname(), getCopy(), targetStreams.get( 1 ).getStepname(), 0 );\n        if ( data.falseRowSet == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"JavaFilter.Log.TargetStepInvalid\", targetStreams.get( 1 ).getStepname() ) );\n        }\n      }\n\n    }\n\n    if ( log.isRowLevel() ) {\n      logRowlevel( \"Read row #\" + getLinesRead() + \" : \" + getInputRowMeta().getString( r ) );\n    }\n\n    boolean keep = calcFields( getInputRowMeta(), r );\n","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/javafilter/JavaFilter.java#L60-L96","documentation":"Thrown by the Java Filter step's processRow when the 'true' (match) target hop's RowSet cannot be found at runtime, meaning the configured true-target step is not connected or not resolvable. The step cannot route matching rows without a valid output hop.","triggerScenarios":"data.chosesTargetSteps is true and findOutputRowSet(stepname, copy, targetStreams.get(0).getStepname(), 0) returns null — the true-target step name in metadata does not correspond to a connected hop at runtime.","commonSituations":"Target step deleted/renamed after configuration; transformation executed with the true hop disconnected; cluster/remote execution where the hop was not deployed; running an old .ktr with stale step names.","solutions":["Open the Java Filter step and re-select the correct 'true' target step.","Recreate the missing hop from the filter to the target step.","Rename the filter's targets after renaming steps (names are stored as strings).","Re-save the transformation after topology changes so target references refresh."],"exampleFix":"// before (metadata)\ntrueTarget = \"Deleted Step\"\n// after\ntrueTarget = \"Send to Kafka\" (existing step name)","handlingStrategy":"validation","validationCode":"// Before execution, confirm both target steps are connected\nfor (StreamInterface s : meta.getStepIOMeta().getTargetStreams()) {\n  if (transMeta.findStep(s.getStepname()) == null) {\n    throw new IllegalStateException(\"Java Filter target step missing: \" + s.getStepname());\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Re-check Java Filter targets whenever renaming/deleting steps.","Keep both true/false hops connected before saving.","Run the transformation check in Spoon prior to execution."],"tags":["kettle","filter","step-routing"],"backgroundTag":"entity-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"}