{"record":{"id":"8c56e0df82dc429c","repo":"pentaho/pentaho-kettle","slug":"unable-to-get-the-server-status-in-xml-format","errorCode":null,"errorMessage":"Unable to get the server status in XML format","messagePattern":"Unable to get the server status in XML format","errorType":"http","errorClass":"ServletException","httpStatus":500,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/www/GetStatusServlet.java","lineNumber":239,"sourceCode":"          sstatus.setPaused( trans.isPaused() );\n          serverStatus.getTransStatusList().add( sstatus );\n        }\n      }\n\n      for ( CarteObjectEntry entry : jobEntries ) {\n        Job job = getJobMap().getJob( entry );\n        if ( job != null ) {\n          String status = job.getStatus();\n          SlaveServerJobStatus jobStatus = new SlaveServerJobStatus( entry.getName(), entry.getId(), status );\n          jobStatus.setLogDate( job.getLogDate() );\n          serverStatus.getJobStatusList().add( jobStatus );\n        }\n      }\n\n      try {\n        out.println( serverStatus.getXML() );\n      } catch ( KettleException e ) {\n        throw new ServletException( \"Unable to get the server status in XML format\", e );\n      }\n    } else {\n      out.println( \"<HTML>\" );\n      out.println( \"<HEAD><TITLE>\"\n        + BaseMessages.getString( PKG, \"GetStatusServlet.KettleSlaveServerStatus\" ) + \"</TITLE>\" );\n      out.println( \"<META http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\">\" );\n\n      int tableBorder = 1;\n      if ( !useLightTheme ) {\n        if ( isJettyMode() ) {\n          out.println( \"<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/static/css/carte.css\\\" />\" );\n        } else {\n          out.print( StatusServletUtils.getPentahoStyles( request.getSession().getServletContext(),  root ) );\n          out.println( \"<style>\" );\n          out.println(\n            \".pentaho-table td, tr.cellTableRow, td.gwt-MenuItem, .toolbar-button:not(.toolbar-button-disabled) {\" );\n          out.println( \"  cursor: pointer;\" );\n          out.println( \"}\" );","sourceCodeStart":221,"sourceCodeEnd":257,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/www/GetStatusServlet.java#L221-L257","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nString status = httpGet(\"http://slave:8084/kettle/status/?xml=Y\");\n// after\nResponse resp = httpGet(\"http://slave:8084/kettle/status/?xml=Y\");\nif (resp.code() == 500) { checkSlaveLogs(); retryAfterJobsSettle(); }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  String statusXml = httpGet(\"http://slave:8084/kettle/status/?xml=Y\");\n} catch (HttpServerErrorException e) {\n  log.error(\"slave status XML failed: {}\", e.getResponseBodyAsString());\n  // fall back to non-XML status page for diagnostics\n  String html = httpGet(\"http://slave:8084/kettle/status/\");\n}","preventionTips":["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."],"tags":["servlet","xml","slave-server","status"],"backgroundTag":"http-error-response","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}