pentaho/pentaho-kettle · error · KettleException

HTTPMeta.Exception.UnexpectedErrorReadingStepInfo

HTTPMeta.Exception.UnexpectedErrorReadingStepInfo

Error message

HTTPMeta.Exception.UnexpectedErrorReadingStepInfo

What it means

HTTPMeta.readRep fails while loading the step's configuration from a repository. Any repository access error during attribute reading is wrapped in KettleException 'HTTPMeta.Exception.UnexpectedErrorReadingStepInfo'.

Solutions

  1. Verify repository database connectivity and credentials.
  2. Reopen the transformation in Spoon to refresh the repository session.
  3. Inspect the step's rows in R_STEP_ATTRIBUTE for corruption; recreate the step and re-save.
  4. Check the repository schema version matches your Pentaho version (run the upgrade scripts).

Example fix

// No code fix; operational remedy:
// before: transformation loaded against stale DB repo connection
// after: reconnect repository (Tools > Repository > Reconnect) and reopen the transformation
Defensive patterns

Strategy: retry

Validate before calling

// verify repository connectivity before loading transformations
if ( !rep.isConnected() || !rep.testConnection() ) throw new IllegalStateException( "repository unreachable" );

Try / catch

try { loadRep( rep, metaStore, id_step, ... ); } catch ( KettleException e ) {
  logError( "Repository read failed, retrying once: " + e.getMessage(), e );
  loadRep( rep, metaStore, id_step, ... ); // retry after reconnect
}

Prevention

When it happens

Trigger: readRep throws while calling rep.getStepAttributeString for url, request headers, or result fields — typically a repository connectivity/session error or corrupted step metadata row in the R_STEP_ATTRIBUTE table.

Common situations: Database repository unreachable mid-session; stale/corrupted repository record for the step; permissions problem on repository tables; repository schema version mismatch.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/http/HTTPMeta.java:476

      int nrheaders = rep.countNrStepAttributes( id_step, "header_name" );
      allocate( nrargs, nrheaders );

      for ( int i = 0; i < nrargs; i++ ) {
        argumentField[i] = rep.getStepAttributeString( id_step, i, "arg_name" );
        argumentParameter[i] = rep.getStepAttributeString( id_step, i, "arg_parameter" );
      }

      for ( int i = 0; i < nrheaders; i++ ) {
        headerField[i] = rep.getStepAttributeString( id_step, i, "header_name" );
        headerParameter[i] = rep.getStepAttributeString( id_step, i, "header_parameter" );
      }

      fieldName = rep.getStepAttributeString( id_step, "result_name" );
      resultCodeFieldName = rep.getStepAttributeString( id_step, "result_code" );
      responseTimeFieldName = rep.getStepAttributeString( id_step, "response_time" );
      responseHeaderFieldName = rep.getStepAttributeString( id_step, "response_header" );
    } catch ( Exception e ) {
      throw new KettleException(
        BaseMessages.getString( PKG, "HTTPMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "url", url );
      rep.saveStepAttribute( id_transformation, id_step, "urlInField", urlInField );
      rep.saveStepAttribute( id_transformation, id_step, "urlField", urlField );
      rep.saveStepAttribute( id_transformation, id_step, "encoding", encoding );
      rep.saveStepAttribute( id_transformation, id_step, "httpLogin", httpLogin );
      rep.saveStepAttribute( id_transformation, id_step, "httpPassword", Encr
        .encryptPasswordIfNotUsingVariables( httpPassword ) );
      rep.saveStepAttribute( id_transformation, id_step, "proxyHost", proxyHost );
      rep.saveStepAttribute( id_transformation, id_step, "proxyPort", proxyPort );
      rep.saveStepAttribute( id_transformation, id_step, "socketTimeout", socketTimeout );
      rep.saveStepAttribute( id_transformation, id_step, "connectionTimeout", connectionTimeout );
      rep.saveStepAttribute( id_transformation, id_step, "closeIdleConnectionsTime", closeIdleConnectionsTime );

View on GitHub (pinned to f3058517a1)