pentaho/pentaho-kettle · error · KettleException
ExecProcess.ProcessEmpty
Error message
ExecProcess.ProcessEmpty
What it means
Message key ExecProcess.ProcessEmpty thrown in ExecProcess.processRow: the string taken from the configured process field is null/empty, so there is no command to execute and the step aborts row processing with this localized error.
Solutions
- Filter out rows with an empty command field before ExecProcess (Filter rows: field IS NOT NULL and <> '').
- Provide a default value upstream (e.g. 'Value Mapper' or NVL-style logic).
- Fix the upstream step that should populate the command field.
- If empty commands are expected but harmless, route those rows to a dummy/ignore branch.
Example fix
// before: empty commands reach the step // (no filtering upstream) // after: filter them in the transformation // Filter rows: [command] IS NOT NULL AND [command] <> '' -> ExecProcess // else -> Dummy (do nothing)
Defensive patterns
Strategy: validation
Validate before calling
// upstream filter before ExecProcess // Filter rows: [command] IS NOT NULL AND [command] <> ''
Try / catch
try { trans.execute(); } catch (KettleException e) { if (e.getMessage().contains("ProcessEmpty")) { /* add empty-value filtering upstream */ } } Prevention
- Filter null/empty command rows before the step
- Provide default values for lookup-missed rows
- Test with production-like data containing blanks
When it happens
Trigger: processRow, per row: data.previousRowMeta.getString(r, data.indexOfProcess) returns null or empty string for the current row (upstream produced blank value or null).
Common situations: Lookup/Stream Lookup returned null for the command field; a JavaScript/Calculator step left the field empty; source data rows contain blank command values; filter mistakenly passes empty rows through.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- ERROR_0006_ExceptionExecutingTalenJob
- Error while executing \'" + commandLine + "\'. Exit value =…
- Error while executing psql \'
- ExecProcess.Error.ProcessFieldMissing
- ExecProcess.Exception.CouldnotFindField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4420f22f4dfd0b20.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/execprocess/ExecProcess.java:122
BaseMessages.getString( PKG, "ExecProcess.Exception.CouldnotFindField", fieldName ) );
}
}
}
}
} // End If first
Object[] outputRow = RowDataUtil.allocateRowData( data.outputRowMeta.size() );
for ( int i = 0; i < data.NrPrevFields; i++ ) {
outputRow[i] = r[i];
}
// get process to execute
String processString = data.previousRowMeta.getString( r, data.indexOfProcess );
ProcessResult processResult = new ProcessResult();
try {
if ( Utils.isEmpty( processString ) ) {
throw new KettleException( BaseMessages.getString( PKG, "ExecProcess.ProcessEmpty" ) );
}
// execute and return result
if ( meta.isArgumentsInFields() ) {
List<String> cmdArray = new ArrayList<>();
cmdArray.add( processString );
for ( int i = 0; i < data.indexOfArguments.length; i++ ) {
// Runtime.exec will fail on null array elements
// Convert to an empty string if value is null
String argString = data.previousRowMeta.getString( r, data.indexOfArguments[i] );
cmdArray.add( Const.NVL( argString, "" ) );
}
execProcess( cmdArray.toArray( new String[0] ), processResult );
} else {
execProcess( processString, processResult );
}View on GitHub (pinned to f3058517a1)