pentaho/pentaho-kettle · error · KettleException

Erreur getting fields from module [

Error message

Erreur getting fields from module [

What it means

Thrown by SalesforceUpdateDialog when retrieving fields for a module fails. The message text interpolates the URL variable (not the module name — a known message bug) and wraps the underlying exception from connecting to Salesforce or calling getFields(selectedModule).

Solutions

  1. Read the wrapped cause to distinguish connection vs metadata errors; verify URL, username, password in the dialog.
  2. Re-pick the module from the refreshed list to ensure it exists in the target org.
  3. Increase the timeout value in the step settings.
  4. Validate connectivity to the Salesforce endpoint (proxy/firewall/TLS).
  5. Confirm the integration user has API enabled and read access to the object fields.

Example fix

// before
throw new KettleException( "Erreur getting fields from module [" + url + "]!", e );
// after
throw new KettleException( "Error getting fields from module [" + selectedModule + "] on [" + url + "]", e );
Defensive patterns

Strategy: try-catch

Validate before calling

// before connect
if ( url == null || !url.matches("https?://.+") ) { throw new KettleException("Bad Salesforce URL: " + url); }
connection.setTimeOut( Math.max(realTimeOut, 60000) );

Try / catch

try { return connection.getFields(selectedModule); } catch ( Exception e ) { Throwable cause = e.getCause(); if ( cause instanceof org.apache.axis.AxisFault ) { /* auth or endpoint issue */ } throw e; }

Prevention

When it happens

Trigger: getFields() fails because connection.connect() failed (bad URL/credentials), the module is missing or renamed in the org, the Salesforce call timed out (realTimeOut too low), or the org returns an API fault.

Common situations: Wrong instance URL (e.g. test.salesforce.com vs login.salesforce.com); org object renamed; SSO/password expired; slow network hitting the configured timeout.

Related errors


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

Appendix: source

Thrown at plugins/salesforce/core/src/main/java/org/pentaho/di/ui/trans/steps/salesforceupdate/SalesforceUpdateDialog.java:788

    getInfo( meta );

    SalesforceConnection connection = null;
    String url = transMeta.environmentSubstitute( meta.getTargetURL() );
    try {
      String selectedModule = transMeta.environmentSubstitute( meta.getModule() );

      // Define a new Salesforce connection
      connection =
        new SalesforceConnection( log, url, transMeta.environmentSubstitute( meta.getUsername() ),
          Utils.resolvePassword( transMeta, meta.getPassword() ) );
      int realTimeOut = Const.toInt( transMeta.environmentSubstitute( meta.getTimeout() ), 0 );
      connection.setTimeOut( realTimeOut );
      // connect to Salesforce
      connection.connect();
      // return fieldsname for the module
      return connection.getFields( selectedModule );
    } catch ( Exception e ) {
      throw new KettleException( "Erreur getting fields from module [" + url + "]!", e );
    } finally {
      if ( connection != null ) {
        try {
          connection.close();
        } catch ( Exception e ) { /* Ignore */
        }
      }
    }
  }

  /**
   * Reads in the fields from the previous steps and from the ONE next step and opens an EnterMappingDialog with this
   * information. After the user did the mapping, those information is put into the Select/Rename table.
   */
  private void generateMappings() {

    if ( !checkInput() ) {
      return;

View on GitHub (pinned to f3058517a1)