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

  1. Open the GPLoad step settings and fill in the empty path field (gpload utility path, control file, or data file).
  2. Verify the value is present at runtime by previewing or logging the step configuration.
  3. 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

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


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)