{"record":{"id":"2bf036c7b6d17ac8","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-job-entry-of-type-xsdvalidator-to-the","errorCode":null,"errorMessage":"Unable to save job entry of type 'xsdvalidator' to the repository for id_job=<id_job>","messagePattern":"Unable to save job entry of type 'xsdvalidator' to the repository for id_job=<id_job>","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java","lineNumber":144,"sourceCode":"    try {\n      xmlfilename = rep.getJobEntryAttributeString( id_jobentry, \"xmlfilename\" );\n      xsdfilename = rep.getJobEntryAttributeString( id_jobentry, \"xsdfilename\" );\n      allowExternalEntities =\n        Boolean.parseBoolean( rep.getJobEntryAttributeString( id_jobentry, \"allowExternalEntities\" ) );\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'xsdvalidator' from the repository for id_jobentry=\"\n          + id_jobentry, dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"xmlfilename\", xmlfilename );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"xsdfilename\", xsdfilename );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"allowExternalEntities\", allowExternalEntities );\n\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'xsdvalidator' to the repository for id_job=\"\n          + id_job, dbe );\n    }\n  }\n\n  public String getRealxmlfilename() {\n    return environmentSubstitute( getxmlFilename() );\n  }\n\n  public String getRealxsdfilename() {\n    return environmentSubstitute( getxsdFilename() );\n  }\n\n  public Result execute( Result previousResult, int nr ) {\n    Result result = previousResult;\n    result.setResult( false );\n\n    String realxmlfilename = getRealxmlfilename();\n    String realxsdfilename = getRealxsdfilename();","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java#L126-L162","documentation":"JobEntryXSDValidator.saveRep rethrows KettleException when saving the entry's attributes (xmlfilename, xsdfilename, allowExternalEntities) to the repository fails with a KettleDatabaseException. The database cause is preserved in the chain.","triggerScenarios":"Saving a job containing an xsdvalidator entry where rep.saveJobEntryAttribute throws KettleDatabaseException.","commonSituations":"Repository DB connection lost mid-save; disk full or constraint violation on the repository; read-only repository; value too long for the attribute column.","solutions":["Read the wrapped KettleDatabaseException for the SQL-level error","Check repository database connectivity and disk space","Verify the repository user has write privileges","Shorten the configured filenames if column length limits are hit"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  entry.saveRep( rep, metaStore, id_job );\n} catch ( KettleException e ) {\n  logError( \"Repository save failed for id_job=\" + id_job + \": \" + e.getCause(), e );\n  throw e;\n}","preventionTips":["Ensure the repository user has write access","Monitor repository DB disk space and connectivity","Keep attribute values within column length limits","Retry saves after transient DB failures"],"tags":["pdi","repository","database-write","job-entry"],"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"}