pentaho/pentaho-kettle · error · KettleException

SalesforceInput.Error.Connection

SalesforceInput.Error.Connection

Error message

SalesforceInput.Error.Connection

What it means

connect() wraps any ConnectionException whose code is NOT in the recognized auth-failure list as this generic KettleException, with the original exception attached. It signals the Salesforce SOAP connection attempt failed for a reason other than the known login codes.

Solutions

  1. Read the cause (KettleException#getCause) to find the real Salesforce error code.
  2. Update the Salesforce API version / wsc dependency used by the plugin.
  3. Check network access: proxy, firewall, and TLS settings for api.salesforce.com.
  4. Confirm the org has the API feature enabled (Enterprise/Unlimited/Developer editions).

Example fix

// before
catch (ConnectionException ex) { /* unmapped code swallowed into generic message */ }
// after
KettleException ke = ...; // in caller
logError("Salesforce connect failed", ke.getCause()); // inspect real code, then fix API version/proxy
Defensive patterns

Strategy: try-catch

Try / catch

try {
  conn.connect();
} catch (KettleException e) {
  logError("Salesforce connection failed", e.getCause()); // inspect the unmapped ConnectionException code
  throw e;
}

Prevention

When it happens

Trigger: connect() throwing ConnectionException with an unmapped ExceptionCode (e.g. API disabled, unknown server codes), or lower-level transport errors surfaced as ConnectionException.

Common situations: Salesforce API version not enabled for the org; new Salesforce error codes not yet handled by this old Kettle plugin; proxy/TLS issues surfacing as connection exceptions.

Understand the failure class

Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/dcf92ce65ad2fb46. Report an issue: GitHub.

Appendix: source

Thrown at plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforce/SalesforceConnection.java:375

        BaseMessages.getString( PKG, "SalesforceInput.Log.ServerTimestamp", getServerTimestamp() );
      }

      if ( log.isDetailed() ) {
        log.logDetailed( BaseMessages.getString( PKG, "SalesforceInput.Log.Connected" ) );
      }

    } catch ( LoginFault ex ) {
      // The LoginFault derives from AxisFault
      ExceptionCode exCode = ex.getExceptionCode();
      if ( exCode == ExceptionCode.FUNCTIONALITY_NOT_ENABLED
        || exCode == ExceptionCode.INVALID_CLIENT || exCode == ExceptionCode.INVALID_LOGIN
        || exCode == ExceptionCode.LOGIN_DURING_RESTRICTED_DOMAIN
        || exCode == ExceptionCode.LOGIN_DURING_RESTRICTED_TIME || exCode == ExceptionCode.ORG_LOCKED
        || exCode == ExceptionCode.PASSWORD_LOCKOUT || exCode == ExceptionCode.SERVER_UNAVAILABLE
        || exCode == ExceptionCode.TRIAL_EXPIRED || exCode == ExceptionCode.UNSUPPORTED_CLIENT ) {
        throw new KettleException( BaseMessages.getString( PKG, "SalesforceInput.Error.InvalidUsernameOrPassword" ) );
      }
      throw new KettleException( BaseMessages.getString( PKG, "SalesforceInput.Error.Connection" ), ex );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "SalesforceInput.Error.Connection" ), e );
    }
  }

  public void query( boolean specifyQuery ) throws KettleException {

    if ( getBinding() == null ) {
      throw new KettleException( BaseMessages.getString( PKG, "SalesforceInput.Exception.CanNotGetBiding" ) );
    }

    try {
      if ( !specifyQuery ) {
        // check if we can query this Object
        DescribeSObjectResult describeSObjectResult = getBinding().describeSObject( getModule() );
        if ( describeSObjectResult == null ) {
          throw new KettleException( BaseMessages.getString( PKG, "SalesforceInput.ErrorGettingObject" ) );
        }

View on GitHub (pinned to f3058517a1)