pentaho/pentaho-kettle · error · KettleException

There was an error passing the exported job to the remote…

Error message

There was an error passing the exported job to the remote server: 

What it means

When exporting a job (with resources) to a remote server, sendToSlaveServer() zips the job and calls slaveServer.sendExport(...) via RegisterPackageServlet. If the returned WebResult is not OK, the library throws a KettleException containing this message plus the server's message. It means the Carte server rejected the uploaded exported job package.

Solutions

  1. Read webResult.getMessage() in the exception text: it contains the Carte server's own error; fix that root cause first.
  2. Confirm the Carte server is running and the same (or compatible) Pentaho version as the client.
  3. Check Carte authentication credentials in the SlaveServer definition (username/password).
  4. Verify the remote server has writable temp space and correct karaf/plugins installed to load the job.
  5. Retry with executionConfiguration exporting fewer resources to isolate which part of the archive the server rejects.

Example fix

// before: stale Carte credentials
SlaveServer ss = new SlaveServer("carte", "host", "8080", "admin", "wrongpass");
// after: verify credentials and reachability first
SlaveServer ss = new SlaveServer("carte", "host", "8080", "cluster", "cluster");
if (!ss.ping()) throw new IllegalStateException("Carte unreachable before export");
Defensive patterns

Strategy: try-catch

Validate before calling

if (!slaveServer.ping()) {
  throw new IllegalStateException("Carte server unreachable before export: " + slaveServer.getHostname());
}

Try / catch

try {
  return Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore);
} catch (KettleException e) {
  log.error("Remote export rejected: {}", e.getMessage());
  throw new RemoteExecutionException(e.getMessage(), e);
}

Prevention

When it happens

Trigger: Calling sendToSlaveServer on a job with resource export enabled where slaveServer.sendExport returns a non-OK WebResult (server-side registration failed, servlet rejected the archive, authentication failed, or an HTTP-level error was converted to an error WebResult).

Common situations: Carte server version mismatch with client; wrong register package servlet URL/port; Carte not authorized to write its temp/repository location; archive name/base resource name issues after export.

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/22a239bc8255a2e6. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/Job.java:1759

        // First export the job... slaveServer.getVariable("MASTER_HOST")
        //
        try ( FileObject tempFile = KettleVFS.getInstance( DefaultBowl.getInstance() )
            .createTempFile( "jobExport", ".zip", System.getProperty( "java.io.tmpdir" ), jobMeta ) ) {
            // Use tempFile within this block
        
          Bowl globalBowl = repository != null ? repository.getBowl() : DefaultBowl.getInstance();
          TopLevelResource topLevelResource =
              ResourceUtil.serializeResourceExportInterface( jobMeta.getBowl(), globalBowl, tempFile.getName().toString(),
                jobMeta, jobMeta, repository, metaStore, executionConfiguration.getXML(),
                 CONFIGURATION_IN_EXPORT_FILENAME );

          // Send the zip file over to the slave server...
          String result =
              slaveServer.sendExport( topLevelResource.getArchiveName(), RegisterPackageServlet.TYPE_JOB, topLevelResource
                  .getBaseResourceName() );
          WebResult webResult = WebResult.fromXMLString( result );
          if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
            throw new KettleException( "There was an error passing the exported job to the remote server: " + Const.CR
                + webResult.getMessage() );
          }
          carteObjectId = webResult.getId();
        }
      } else {
        String xml = new JobConfiguration( jobMeta, executionConfiguration ).getXML();

        String reply = slaveServer.sendXML( xml, RegisterJobServlet.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 job on the remote server: " + Const.CR + webResult
              .getMessage() );
        }
        carteObjectId = webResult.getId();
      }

      // Start the job
      //

View on GitHub (pinned to f3058517a1)