pentaho/pentaho-kettle · error · KettleException
There was an error posting the transformation on the remote…
Error message
There was an error posting the transformation on the remote server:
What it means
Thrown by Trans.sendToSlaveServer(...) on the non-export path: the transformation configuration XML is POSTed to RegisterTransServlet via SlaveServer.sendXML(...), and the returned WebResult is not 'OK', meaning the remote server failed to register the transformation for later execution.
Solutions
- Read the appended webResult.getMessage() and the slave's carte.log to see why registration failed.
- Install the same plugins/steps on the slave as the submitting client.
- Check for proxies/limits that truncate or block large XML POST bodies.
- Verify Carte credentials/authorization for the register-trans servlet.
- Escape/normalize variable values (control characters) before building the configuration, or switch to the export path.
Example fix
// before: slave missing a custom step
String reply = slaveServer.sendXML(xml, RegisterTransServlet.CONTEXT_PATH + "/?xml=Y");
// after: verify plugin availability remotely first, then send
if (slaveServer.getServerInfo() == null) throw new KettleException("Slave unreachable");
// deploy matching plugins to the slave, then:
String reply = slaveServer.sendXML(xml, RegisterTransServlet.CONTEXT_PATH + "/?xml=Y"); Defensive patterns
Strategy: try-catch
Validate before calling
// verify slave reachable and info available before registering the transformation
if (slaveServer.getServerInfo() == null) {
throw new KettleException("Slave " + slaveServer.getName() + " not reachable for registration");
} Try / catch
try {
Trans.sendToSlaveServer(transMeta, config, repository, metaStore);
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("posting the transformation")) {
log.error("Slave failed to register transformation: " + e.getMessage(), e);
// install missing plugins / check carte.log, then retry
} else throw e;
} Prevention
- Install the same plugins on slaves as on the submitting client.
- Check carte.log on the slave when registration fails.
- Watch for proxies/size limits truncating XML POSTs.
- Verify Carte credentials for the register-trans servlet.
When it happens
Trigger: Remote execution without resource exporting: slaveServer.sendXML(TransConfiguration XML, RegisterTransServlet) returns an error WebResult because the slave could not parse/store the submitted transformation configuration.
Common situations: Missing steps/plugins on the remote server causing TransMeta load failure; XML truncated by proxy or size limit; authentication rejection returned as non-OK result; character-encoding issues in variable values embedded in the XML.
Related errors
- There was an error passing the exported transformation to…
- An error occurred while preparing the execution of a slave…
- An error occurred while starting the execution of a slave…
- DefaultRunConfigurationExecutor.RemoteNotFound.Error
- JobTrans.Exception.UnableToFindRemoteSlaveServer
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4d4ee86d54b64a52.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/Trans.java:4393
topLevelResource.getArchiveName(),
RegisterPackageServlet.TYPE_TRANS,
topLevelResource.getBaseResourceName() );
WebResult webResult = WebResult.fromXMLString( result );
if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
throw new KettleException( "There was an error passing the exported transformation to the remote server: "
+ Const.CR + webResult.getMessage() );
}
carteObjectId = webResult.getId();
}
} else {
// Now send it off to the remote server...
//
String xml = new TransConfiguration( transMeta, executionConfiguration ).getXML();
String reply = slaveServer.sendXML( xml, RegisterTransServlet.CONTEXT_PATH + "/?xml=Y" );
WebResult webResult = WebResult.fromXMLString( reply );
if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
throw new KettleException( "There was an error posting the transformation on the remote server: " + Const.CR
+ webResult.getMessage() );
}
carteObjectId = webResult.getId();
}
// Prepare the transformation
//
String reply =
slaveServer.execService( PrepareExecutionTransServlet.CONTEXT_PATH + "/?name=" + URLEncoder.encode( transMeta
.getName(), "UTF-8" ) + "&xml=Y&id=" + carteObjectId );
WebResult webResult = WebResult.fromXMLString( reply );
if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
throw new KettleException( "There was an error preparing the transformation for excution on the remote server: "
+ Const.CR + webResult.getMessage() );
}
// Start the transformation
//View on GitHub (pinned to f3058517a1)