pentaho/pentaho-kettle · error · KettleException
XsdValidatorMeta.Exception.UnableToSaveStepInfo
Error message
XsdValidatorMeta.Exception.UnableToSaveStepInfo
What it means
Thrown by XsdValidatorMeta.saveRep when persisting the step's settings to the repository fails. Exceptions from rep.saveStepAttribute/saveJobEntryAttribute are wrapped in a KettleException with this message plus the id_step, with the original error as cause. It means the step configuration was not saved.
Solutions
- Check the cause exception for the underlying JDBC error.
- Verify repository database connectivity and write permissions.
- Retry the save after reconnecting; verify the transformation id is current.
- Save the transformation as a file (.ktr) as a workaround.
Defensive patterns
Strategy: try-catch
Try / catch
try { repository.save(transMeta, versionComment, monitor, null) } catch (KettleException e) { log.error("Save failed for step " + e.getMessage(), e); } Prevention
- Verify repository write access and disk space before bulk saves
- Avoid concurrent edits of the same transformation
- Keep repository connections alive-checked; save promptly after edits
When it happens
Trigger: saveRep is called during transformation save and a rep.saveStepAttribute/saveJobEntryAttribute call throws (DB connection lost, constraint violation, read-only repository, invalid id_step).
Common situations: Repository DB session dropped during save; read-only or full database; concurrent modification of the transformation; saving to a transformation whose id is stale.
Related errors
- ERROR_0003_Cannot_Save_Job_Entry
- GetSequenceMeta.Exception.UnableToSaveStepInfo
- JobEntryWaitForSQL.UnableSaveRep
- SalesforceInputMeta.Exception.ErrorSavingToRepository
- Unable to save job entry copy to the repository…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/1c00ff94b6f3daee.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xsdvalidator/XsdValidatorMeta.java:330
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "xdsfilename", xsdFilename );
rep.saveStepAttribute( id_transformation, id_step, "xmlstream", xmlStream );
rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultFieldname );
rep.saveStepAttribute( id_transformation, id_step, "xmlsourcefile", xmlSourceFile );
rep.saveStepAttribute( id_transformation, id_step, "addvalidationmsg", addValidationMessage );
rep.saveStepAttribute( id_transformation, id_step, "validationmsgfield", validationMessageField );
rep.saveStepAttribute( id_transformation, id_step, "ifxmlvalid", ifXmlValid );
rep.saveStepAttribute( id_transformation, id_step, "ifxmlunvalid", ifXmlInvalid );
rep.saveStepAttribute( id_transformation, id_step, "outputstringfield", outputStringField );
rep.saveStepAttribute( id_transformation, id_step, "xsddefinedfield", xsdDefinedField );
rep.saveStepAttribute( id_transformation, id_step, "xsdsource", xsdSource );
rep.saveJobEntryAttribute( id_transformation, id_step, "allowExternalEntities", allowExternalEntities );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "XsdValidatorMeta.Exception.UnableToSaveStepInfo" )
+ id_step, e );
}
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepinfo, RowMetaInterface prev,
String[] input, String[] output, RowMetaInterface info, VariableSpace space, Repository repository,
IMetaStore metaStore ) {
CheckResult cr;
// Check XML stream field
if ( Utils.isEmpty( xmlStream ) ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString( PKG,
"XsdValidatorMeta.CheckResult.XMLStreamFieldEmpty" ), stepinfo );
remarks.add( cr );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString( PKG,View on GitHub (pinned to f3058517a1)