pentaho/pentaho-kettle · error · KettleException

Error executing Transformation: " + logging

Error message

Error executing Transformation: " + logging

What it means

RunTransServlet.doGet wraps the actual transformation execution (trans.execute) in a try/catch and rethrows a KettleException whose message embeds the transformation's accumulated log buffer via KettleLogStore.getAppender().getBuffer(trans.getLogChannelId(), false). The original exception is chained as the cause, and the servlet also catches it one level out to return a WebResult error to the HTTP caller. It means 'the transformation failed to start or run', with the log text attached for diagnosis.

Solutions

  1. Read the chained cause and the log text in the message (the transformation's log buffer) to find the failing step; the message body itself contains the step-by-step log.
  2. Verify all required transformation parameters and variables are passed (add &param=... to the servlet URL or set them in kettle.properties).
  3. Test the transformation's DB connections directly from the Carte host (network/firewall, credentials).
  4. Run the same transformation locally in Spoon to reproduce and see the full error dialog.
  5. Ensure required Kettle plugins/jars are present in the Carte server's classpath.

Example fix

// before: calling with no parameters
GET http://carte:8080/kettle/runTrans/?trans=mytrans

// after: pass required params and inspect log on failure
GET http://carte:8080/kettle/runTrans/?trans=mytrans&rep=repo1&user=u&pass=p&param=DATE=2026-09-13
Defensive patterns

Strategy: try-catch

Validate before calling

// before invoking the servlet, check required params exist
if (!transParams.containsKey("trans")) throw new IllegalArgumentException("trans is required");
// and test DB connectivity used by the ktr from the Carte host

Try / catch

try {
  String resp = callCarte("runTrans", params);
  if (!resp.contains("<result>OK</result>")) throw new IllegalStateException("Trans failed: " + extractLog(resp));
} catch (Exception e) {
  log.error("Transformation execution failed; message embeds the trans log", e);
}

Prevention

When it happens

Trigger: Calling the Carte servlet GET /kettle/runTrans/ with a transName/repository that resolves, but Trans.execute(null) throws: e.g. transformation XML/repository content invalid, a step fails during init, missing parameters/variables required by the transformation, or database connections in the transformation cannot connect.

Common situations: CI/CD scripts or schedulers invoking Carte's runTrans REST endpoint; DB connection outage or wrong credentials inside the transformation; a variable like ${INTERNAL_VAR} or a named parameter left unset because the HTTP caller omitted it; Kettle environment/plugin jar missing on the Carte server.

Understand the failure class

Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/fee67e5c6f2723bf. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/www/RunTransServlet.java:253

      trans.setSocketRepository( getSocketRepository() );

      getTransformationMap().addTransformation( trans.getName(), carteObjectId, trans, transConfiguration );

      // DO NOT disconnect from the shared repository connection when the job finishes.
      //
      String message = "Transformation '" + trans.getName() + "' was added to the list with id " + carteObjectId;
      logBasic( message );

      try {
        // Execute the transformation...
        //
        trans.execute( null );

        finishProcessing( trans, out );

      } catch ( Exception executionException ) {
        String logging = KettleLogStore.getAppender().getBuffer( trans.getLogChannelId(), false ).toString();
        throw new KettleException( "Error executing Transformation: " + logging, executionException );
      }
    } catch ( Exception ex ) {
      logError( "Error occurred while executing transformation", ex );
      out.println( new WebResult( WebResult.STRING_ERROR, BaseMessages.getString(
        PKG, "RunTransServlet.Error.UnexpectedError", Const.CR + Const.getStackTracker( ex ) ) ) );
    }
  }

  //need for unit test
  Trans createTrans( TransMeta transMeta, SimpleLoggingObject servletLoggingObject ) {
    return new Trans( transMeta, servletLoggingObject );
  }

  private TransMeta loadTrans( Repository repository, String transformationName, VariableSpace parentVariableSpace ) throws KettleException {

    if ( repository == null ) {
      throw new KettleException( "Repository required." );
    } else {

View on GitHub (pinned to f3058517a1)