pentaho/pentaho-kettle · error · ServletException
Unable to get the server status in XML format
Error message
Unable to get the server status in XML format
What it means
GetStatusServlet.doGet wraps a KettleException from serverStatus.getXML() in a ServletException with this message when the slave server status document cannot be serialized. It surfaces as HTTP 500 to XML-mode status pollers.
Solutions
- Check the server log for the wrapped KettleException cause and fix the underlying failing transformation/job status.
- Retry /kettle/status/ once the problematic transformation/job completes or is removed.
- Exclude/stop the failing job/transformation on the slave before polling status.
- Increase heap if the failure is memory-related during XML assembly.
Example fix
// before
String status = httpGet("http://slave:8084/kettle/status/?xml=Y");
// after
Response resp = httpGet("http://slave:8084/kettle/status/?xml=Y");
if (resp.code() == 500) { checkSlaveLogs(); retryAfterJobsSettle(); } Defensive patterns
Strategy: try-catch
Try / catch
try {
String statusXml = httpGet("http://slave:8084/kettle/status/?xml=Y");
} catch (HttpServerErrorException e) {
log.error("slave status XML failed: {}", e.getResponseBodyAsString());
// fall back to non-XML status page for diagnostics
String html = httpGet("http://slave:8084/kettle/status/");
} Prevention
- Fix or remove broken transformations/jobs on the slave before master polling.
- Poll status at a reasonable interval; avoid concurrent heavy polling.
- Keep slave heap healthy; monitor for memory pressure.
- Check slave logs promptly — the wrapped KettleException names the real cause.
When it happens
Trigger: GET /kettle/status/?xml=Y when ServerStatus.getXML() throws — typically while serializing per-transformation/per-job statuses whose individual metrics or log data fail to render.
Common situations: Carte slave status polling by a master in a clustered run; a monitored transformation/job on the slave is in a broken state; memory pressure during status XML assembly.
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
- GetJobStatusServlet.Error.UnableToGetJobStatusInXML
- Invalid Transformation - Missing…
- Invalid Transformation - Missing…
- Invalid Transformation Name
- Invalid Transformation Name
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8c56e0df82dc429c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/www/GetStatusServlet.java:239
sstatus.setPaused( trans.isPaused() );
serverStatus.getTransStatusList().add( sstatus );
}
}
for ( CarteObjectEntry entry : jobEntries ) {
Job job = getJobMap().getJob( entry );
if ( job != null ) {
String status = job.getStatus();
SlaveServerJobStatus jobStatus = new SlaveServerJobStatus( entry.getName(), entry.getId(), status );
jobStatus.setLogDate( job.getLogDate() );
serverStatus.getJobStatusList().add( jobStatus );
}
}
try {
out.println( serverStatus.getXML() );
} catch ( KettleException e ) {
throw new ServletException( "Unable to get the server status in XML format", e );
}
} else {
out.println( "<HTML>" );
out.println( "<HEAD><TITLE>"
+ BaseMessages.getString( PKG, "GetStatusServlet.KettleSlaveServerStatus" ) + "</TITLE>" );
out.println( "<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" );
int tableBorder = 1;
if ( !useLightTheme ) {
if ( isJettyMode() ) {
out.println( "<link rel=\"stylesheet\" type=\"text/css\" href=\"/static/css/carte.css\" />" );
} else {
out.print( StatusServletUtils.getPentahoStyles( request.getSession().getServletContext(), root ) );
out.println( "<style>" );
out.println(
".pentaho-table td, tr.cellTableRow, td.gwt-MenuItem, .toolbar-button:not(.toolbar-button-disabled) {" );
out.println( " cursor: pointer;" );
out.println( "}" );View on GitHub (pinned to f3058517a1)