{"record":{"id":"6db658bfaeb7eae0","repo":"pentaho/pentaho-kettle","slug":"userdefinedjavaclassmeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"UserDefinedJavaClassMeta.Exception.UnableToSaveStepInfo","messagePattern":"UserDefinedJavaClassMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/UserDefinedJavaClassMeta.java","lineNumber":684,"sourceCode":"          + ElementNames.step_tag.name(), stepDefinition.tag );\n        rep.saveStepAttribute( id_transformation, id_step, i, ElementNames.target_.name()\n          + ElementNames.step_name.name(), stepDefinition.stepMeta != null\n          ? stepDefinition.stepMeta.getName() : null );\n        rep.saveStepAttribute( id_transformation, id_step, i, ElementNames.target_.name()\n          + ElementNames.step_description.name(), stepDefinition.description );\n      }\n\n      for ( int i = 0; i < usageParameters.size(); i++ ) {\n        UsageParameter usageParameter = usageParameters.get( i );\n        rep.saveStepAttribute(\n          id_transformation, id_step, i, ElementNames.parameter_tag.name(), usageParameter.tag );\n        rep.saveStepAttribute(\n          id_transformation, id_step, i, ElementNames.parameter_value.name(), usageParameter.value );\n        rep.saveStepAttribute(\n          id_transformation, id_step, i, ElementNames.parameter_description.name(), usageParameter.description );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"UserDefinedJavaClassMeta.Exception.UnableToSaveStepInfo\" )\n        + id_step, e );\n    }\n  }\n\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepinfo,\n    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,\n    Repository repository, IMetaStore metaStore ) {\n    CheckResult cr;\n\n    // See if we have input streams leading to this step!\n    if ( input.length > 0 ) {\n      cr =\n        new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"UserDefinedJavaClassMeta.CheckResult.ConnectedStepOK2\" ), stepinfo );\n      remarks.add( cr );\n    } else {\n      cr =","sourceCodeStart":666,"sourceCodeEnd":702,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/userdefinedjavaclass/UserDefinedJavaClassMeta.java#L666-L702","documentation":"Thrown when saving the UDJC step's metadata to a repository fails, wrapped with the key UnableToSaveStepInfo plus the step id, preserving the cause. This occurs inside the step's save path (the SOURCE region shows the catch block following rep.saveStepAttribute calls; the listed raising method is the constructor region but the message belongs to the save flow).","triggerScenarios":"During saveRep of a transformation containing a UDJC step, rep.saveStepAttribute calls fail — repository connection dropped, transaction error, permission denied, or value exceeds column size.","commonSituations":"Database repository out of disk/space or max length exceeded by large code snippets; read-only repository credentials; network drop while saving; concurrent modification of the same transformation.","solutions":["Check the wrapped cause: connection vs. permission vs. data-too-long.","Verify repository credentials have write permission on the target transformation.","If the snippet is very large and the repository column limit is hit, shorten code or move it to a jar/class on the classpath.","Retry after restoring repository connectivity; commit any pending transactions.","Save locally as XML first to avoid losing work, then fix repository access."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Verify write access before save\nif (!repository.getSecurityProvider().isReadOnly()) { /* save */ }","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.saveRep(repository, metaStore, dirId, transMeta.getObjectId());\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"UnableToSaveStepInfo\")) {\n    // save to local XML instead to avoid data loss\n    transMeta.exportXML(...);\n  }\n}","preventionTips":["Ensure repository credentials have write permission","Keep UDJC snippets under repository column size limits","Save local XML copies before large edits","Monitor repository DB connectivity/health"],"tags":["kettle","repository","serialization","save"],"backgroundTag":"database-write-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"}