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
- 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.
- Verify all required transformation parameters and variables are passed (add ¶m=... to the servlet URL or set them in kettle.properties).
- Test the transformation's DB connections directly from the Carte host (network/firewall, credentials).
- Run the same transformation locally in Spoon to reproduce and see the full error dialog.
- 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¶m=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
- Always pass required transformation parameters and variables in the request.
- Smoke-test the ktr in Spoon on an identical environment before automating.
- Monitor Carte logs, not just HTTP status, since failures also return a WebResult error body.
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
- Log string is too long
- Repository required.
- Trans.Exception.ConnectionCouldNotBeFound
- Trans.Exception.ErrorCalculatingDateRange
- Trans.Exception.ErrorWritingLogRecordToTable
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)