pentaho/pentaho-kettle · error · KettleException
exceptionMessage
Error message
exceptionMessage
What it means
GPLoad.getPath() throws this KettleException when the path to a required file (gpload utility path, control file, or data file) is empty before variable substitution. The message comes from the caller-supplied exceptionMessage parameter, so it identifies which path was missing.
Solutions
- Open the GPLoad step settings and fill in the empty path field (gpload utility path, control file, or data file).
- Verify the value is present at runtime by previewing or logging the step configuration.
- If the field uses variables that may be empty, define them in kettle.properties or a Set Variables step before this one.
Example fix
// before (kettle.properties) GPLOAD_HOME= // after GPLOAD_HOME=/usr/local/bin
Defensive patterns
Strategy: validation
Validate before calling
String path = meta.getGpLoadPath();
if (path == null || path.trim().isEmpty()) {
throw new IllegalStateException("GPLoad path field is empty; set it in the step dialog");
} Type guard
boolean isNonEmpty(String s) { return s != null && !s.trim().isEmpty(); } Try / catch
try {
execute();
} catch (KettleException ke) {
logError("GPLoad path missing: " + ke.getMessage(), ke);
throw ke;
} Prevention
- Always fill the gpload utility path and file paths in the step dialog before saving
- Define all referenced Kettle variables in kettle.properties on every environment
- Preview the transformation to catch empty fields before production runs
When it happens
Trigger: createCommandLine passes a path field from GPLoadMeta that is null or an empty string, so Utils.isEmpty(pathToFile) is true at the top of getPath().
Common situations: The GPLoad utility path or control/data file field left blank in the step dialog; trailing-space-only values; migrating transformations where the path field was never filled in.
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
- GPLoadMeta.GetSQL.NoConnectionDefined
- ColumnExists.Error.TablenameFieldMissing
- Error while closing output
- Error while executing \'" + commandLine + "\'. Exit value =…
- GetSubFolders.Exception.CouldnotFindField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9a38e778f0d30cc1.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoad.java:448
/**
* Returns the path to the pathToFile. It should be the same as what was passed but this method will check the file
* system to see if the path is valid.
*
* @param pathToFile
* Path to the file to verify.
* @param exceptionMessage
* The message to use when the path is not provided.
* @param checkExistence
* When true the path's existence will be verified.
* @return
* @throws KettleException
*/
private String getPath( String pathToFile, String exceptionMessage, boolean checkExistenceOfFile )
throws KettleException {
// Make sure the path is not empty
if ( Utils.isEmpty( pathToFile ) ) {
throw new KettleException( exceptionMessage );
}
// make sure the variable substitution is not empty
pathToFile = environmentSubstitute( pathToFile ).trim();
if ( Utils.isEmpty( pathToFile ) ) {
throw new KettleException( exceptionMessage );
}
FileObject fileObject = KettleVFS.getInstance( getTransMeta().getBowl() ).getFileObject( pathToFile, getTransMeta() );
try {
// we either check the existence of the file
if ( checkExistenceOfFile ) {
if ( !fileObject.exists() ) {
throw new KettleException( BaseMessages.getString( PKG, "GPLoad.Execption.FileDoesNotExist", pathToFile ) );
}
} else { // if the file does not have to exist, the parent, or source folder, does.
FileObject parentFolder = fileObject.getParent();
if ( parentFolder.exists() ) {View on GitHub (pinned to f3058517a1)