{"record":{"id":"7931f99d8188ea2c","repo":"pentaho/pentaho-kettle","slug":"symmetriccryptotransmeta-exception-7931f9","errorCode":"SymmetricCryptoTransMeta.Exception.UnexpectedErrorInReadingStepInfo","errorMessage":"SymmetricCryptoTransMeta.Exception.UnexpectedErrorInReadingStepInfo","messagePattern":"SymmetricCryptoTransMeta\\.Exception\\.UnexpectedErrorInReadingStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetriccryptotrans/SymmetricCryptoTransMeta.java","lineNumber":343,"sourceCode":"  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      operationType =\n        getOperationTypeByCode( Const.NVL( rep.getStepAttributeString( id_step, \"operation_type\" ), \"\" ) );\n      algorithm = rep.getStepAttributeString( id_step, \"algorithm\" );\n      schema = rep.getStepAttributeString( id_step, \"schema\" );\n      secretKeyField = rep.getStepAttributeString( id_step, \"secretKeyField\" );\n      messageField = rep.getStepAttributeString( id_step, \"messageField\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n\n      secretKey = Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( id_step, \"secretKey\" ) );\n      secretKeyInField = rep.getStepAttributeBoolean( id_step, \"secretKeyInField\" );\n      readKeyAsBinary = rep.getStepAttributeBoolean( id_step, \"readKeyAsBinary\" );\n      outputResultAsBinary = rep.getStepAttributeBoolean( id_step, \"outputResultAsBinary\" );\n\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"SymmetricCryptoTransMeta.Exception.UnexpectedErrorInReadingStepInfo\" ), e );\n    }\n  }\n\n  private static String getOperationTypeCode( int i ) {\n    if ( i < 0 || i >= operationTypeCode.length ) {\n      return operationTypeCode[0];\n    }\n    return operationTypeCode[i];\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n      rep.saveStepAttribute( id_transformation, id_step, \"operation_type\", getOperationTypeCode( operationType ) );\n      rep.saveStepAttribute( id_transformation, id_step, \"algorithm\", algorithm );\n      rep.saveStepAttribute( id_transformation, id_step, \"schema\", schema );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"secretKeyField\", secretKeyField );","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetriccryptotrans/SymmetricCryptoTransMeta.java#L325-L361","documentation":"SymmetricCryptoTransMeta.readRep() loads the step's settings from a repository by id_step (getStepAttributeString/getStepAttributeBoolean for secretKey, secretKeyInField, readKeyAsBinary, outputResultAsBinary). Any exception thrown by the repository access is wrapped in a KettleException with this message, indicating the step info could not be read from the repository. The underlying cause is chained.","triggerScenarios":"Calling TransMeta load from repository where the repository connection fails mid-read, id_step points to a missing/corrupt step record, or repository schema/attribute tables are inconsistent.","commonSituations":"Repository DB unavailable or permissions lost; stale id_step after a repository cleanup; repository version mismatch after upgrading PDI; network interruption to the repository database.","solutions":["Verify repository connectivity and credentials, then retry loading the transformation.","Check the step's row in the repository attribute tables (R_STEP_ATTRIBUTE) for corruption; re-save the step in Spoon.","Restore from repository backup or re-create the step.","Confirm PDI/repository plugin versions match."],"exampleFix":"// before\nTransMeta tm = new TransMeta(rep, \"MyTrans\", null); // repo down\n// after\nif (rep.isConnected() && rep.testConnection()) {\n  TransMeta tm = new TransMeta(rep, \"MyTrans\", null);\n}","handlingStrategy":"try-catch","validationCode":"// Verify repository connectivity before loading\nif (!rep.testConnection()) {\n  throw new IllegalStateException(\"Repository not reachable\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  TransMeta tm = new TransMeta(rep, \"MyTrans\", null);\n} catch (KettleException e) {\n  logError(\"Failed reading step info from repository: \" + e.getCause(), e);\n}","preventionTips":["Check repository health/credentials before scheduled loads.","Back up the repository database regularly.","Keep PDI client and repository schema versions in sync."],"tags":["kettle","pdi","repository","persistence"],"backgroundTag":"database-query-failed","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"}