{"record":{"id":"5530c82ba50ec743","repo":"pentaho/pentaho-kettle","slug":"execprocessmeta-exception-unabletoreadstepinfo","errorCode":null,"errorMessage":"ExecProcessMeta.Exception.UnableToReadStepInfo","messagePattern":"ExecProcessMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/execprocess/ExecProcessMeta.java","lineNumber":269,"sourceCode":"      if ( outputLineDelimiter == null ) {\n        outputLineDelimiter = \"\"; // default to empty string for backward compatibility\n      }\n\n      argumentsInFields = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"argumentsInFields\" ) );\n      Node argumentFieldsNode = XMLHandler.getSubNode( stepnode, \"argumentFields\" );\n      if ( argumentFieldsNode == null ) {\n        argumentFieldNames = new String[0];\n      } else {\n        int argumentFieldCount = XMLHandler.countNodes( argumentFieldsNode, \"argumentField\" );\n        argumentFieldNames = new String[argumentFieldCount];\n        for ( int i = 0; i < argumentFieldCount; i++ ) {\n          Node fnode = XMLHandler.getSubNodeByNr( argumentFieldsNode, \"argumentField\", i );\n          argumentFieldNames[i] = XMLHandler.getTagValue( fnode, \"argumentFieldName\" );\n        }\n      }\n\n    } catch ( Exception e ) {\n      throw new KettleXMLException(\n        BaseMessages.getString( PKG, \"ExecProcessMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      processfield = rep.getStepAttributeString( id_step, \"processfield\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n      errorfieldname = rep.getStepAttributeString( id_step, \"errorfieldname\" );\n      exitvaluefieldname = rep.getStepAttributeString( id_step, \"exitvaluefieldname\" );\n      failwhennotsuccess = rep.getStepAttributeBoolean( id_step, \"failwhennotsuccess\" );\n      outputLineDelimiter = rep.getStepAttributeString( id_step, \"outputlinedelimiter\" );\n      if ( outputLineDelimiter == null ) {\n        outputLineDelimiter = \"\"; // default to empty string for backward compatibility\n      }\n      argumentsInFields = rep.getStepAttributeBoolean( id_step, \"argumentsInFields\" );\n","sourceCodeStart":251,"sourceCodeEnd":287,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/execprocess/ExecProcessMeta.java#L251-L287","documentation":"ExecProcessMeta.loadXML (via readData) wraps any exception while parsing the step's XML definition into a KettleXMLException with this message. It means the <process> step XML in the .ktr file is malformed or contains unexpected node structures.","triggerScenarios":"Loading a .ktr/.kjb file whose ExecProcess step XML cannot be parsed: missing nodes (processField, argumentFields), corrupt XML from manual editing, or XML produced by an incompatible plugin/version.","commonSituations":"Hand-edited transformation files; merge conflicts in version-controlled .ktr files; files truncated during transfer; opening a transformation saved by a newer Pentaho release with changed XML schema.","solutions":["Open the .ktr in a text editor and inspect/repair the ExecProcess step's XML nodes (processField, argumentField entries).","Use the cause in the stack trace (XMLHandler error) to locate the exact malformed tag.","Restore the file from version control or a backup, or re-create the step in Spoon and re-save.","Validate XML well-formedness (xmllint) and ensure the saving/loading Pentaho versions are compatible."],"exampleFix":"// before: hand-edited XML missing the process field node\n// <processField/> (empty/corrupt)\n// after: correct node restored\n// <processField><name>command</name></processField>\n// or load with error handling:\ntry {\n  TransMeta tm = new TransMeta(\"trans.ktr\");\n} catch (KettleXMLException e) {\n  logError(\"Corrupt step XML, restoring backup\", e);\n}","handlingStrategy":"try-catch","validationCode":"// validate the .ktr before loading\njava.io.File f = new java.io.File(\"trans.ktr\");\nif (!f.exists() || f.length() == 0) { throw new IllegalStateException(\"Transformation file missing/empty\"); }\n// optionally: xmllint --noout trans.ktr","typeGuard":null,"tryCatchPattern":"try { TransMeta tm = new TransMeta(\"trans.ktr\"); } catch (KettleXMLException e) { log.error(\"Cannot parse step XML\", e.getCause()); /* restore backup */ }","preventionTips":["Do not hand-edit .ktr files; use Spoon","Keep .ktr files in version control and resolve conflicts carefully","Validate XML after merges and before deployment"],"tags":["xml","kettle","metadata-load","file-parsing"],"backgroundTag":"json-parse-error","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"}