{"record":{"id":"7e5f349f7d05de2e","repo":"pentaho/pentaho-kettle","slug":"splitfieldtorowsmeta-exception","errorCode":"SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo","errorMessage":"SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo","messagePattern":"SplitFieldToRowsMeta\\.Exception\\.UnexpectedErrorInReadingStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java","lineNumber":193,"sourceCode":"    retval.append( \"   \" + XMLHandler.addTagValue( \"rownum\", includeRowNumber ) );\n    retval.append( \"   \" + XMLHandler.addTagValue( \"rownum_field\", rowNumberField ) );\n    retval.append( \"   \" + XMLHandler.addTagValue( \"resetrownumber\", resetRowNumber ) );\n    retval.append( \"   \" + XMLHandler.addTagValue( \"delimiter_is_regex\", isDelimiterRegex ) );\n\n    return retval.toString();\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      splitField = rep.getStepAttributeString( id_step, \"splitfield\" );\n      delimiter = rep.getStepAttributeString( id_step, \"delimiter\" );\n      newFieldname = rep.getStepAttributeString( id_step, \"newfield\" );\n      includeRowNumber = rep.getStepAttributeBoolean( id_step, \"rownum\" );\n      rowNumberField = rep.getStepAttributeString( id_step, \"rownum_field\" );\n      resetRowNumber = rep.getStepAttributeBoolean( id_step, \"reset_rownumber\" );\n      isDelimiterRegex = rep.getStepAttributeBoolean( id_step, 0, \"delimiter_is_regex\", false );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo\" ), e );\n    }\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, \"splitfield\", splitField );\n      rep.saveStepAttribute( id_transformation, id_step, \"delimiter\", delimiter );\n      rep.saveStepAttribute( id_transformation, id_step, \"newfield\", newFieldname );\n      rep.saveStepAttribute( id_transformation, id_step, \"rownum\", includeRowNumber );\n      rep.saveStepAttribute( id_transformation, id_step, \"reset_rownumber\", resetRowNumber );\n      rep.saveStepAttribute( id_transformation, id_step, \"rownum_field\", rowNumberField );\n      rep.saveStepAttribute( id_transformation, id_step, \"delimiter_is_regex\", isDelimiterRegex );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository\" )\n        + id_step, e );\n    }","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java#L175-L211","documentation":"Thrown by SplitFieldToRowsMeta.readRep when loading this step's settings from a repository fails. The method reads step attributes (newfield, rownum, rownum_field, reset_rownumber, delimiter_is_regex) via the Repository API; any exception is wrapped in a KettleException with this message key. It means the step configuration could not be reconstructed from the repository.","triggerScenarios":"Calling TransMeta.loadFromRepository where getStepAttributeString/getStepAttributeBoolean throws — repository DB connection failure, missing R_STEP_ATTRIBUTE rows, or a schema mismatch between PDI version and repository tables.","commonSituations":"Repository database down or network dropped while opening a transformation from the repository; repository schema not upgraded after PDI upgrade; step deleted from repository by another user mid-load.","solutions":["Check the wrapped cause for the repository/database error","Verify repository connectivity and reconnect","Run the repository schema upgrade for your PDI version","Reload the transformation after the repository is healthy"],"exampleFix":"// before\nTransMeta tm = new TransMeta();\ntm.loadTransMeta(rep, id_transformation, metaStore); // may throw\n// after\ntry {\n  tm.loadTransMeta(rep, id_transformation, metaStore);\n} catch (KettleException e) {\n  logError(\"Failed reading step from repository: \" + e.getCause());\n  rep.disconnect(); rep.connect();\n  tm.loadTransMeta(rep, id_transformation, metaStore);\n}","handlingStrategy":"try-catch","validationCode":"// before loading from repository\nif (!rep.isConnected()) rep.connect();\nObjectId id = rep.getTransformationID(name, dir); // throws early if missing","typeGuard":null,"tryCatchPattern":"try { transMeta.loadTransMeta(rep, id, metaStore); } catch (KettleException e) { logError(\"Repository read failed: \" + e.getCause()); /* reconnect or fall back to file load */ }","preventionTips":["Verify repository connectivity before bulk loads","Keep repository schema in sync with the PDI version","Avoid concurrent modification of the same transformation","Keep local .ktr exports as fallback"],"tags":["repository","deserialization","kettle"],"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"}