pentaho/pentaho-kettle · error · KettleException

Unable to save job entry of type 'xsdvalidator' to the…

Error message

Unable to save job entry of type 'xsdvalidator' to the repository for id_job=<id_job>

What it means

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.

Solutions

  1. Read the wrapped KettleDatabaseException for the SQL-level error
  2. Check repository database connectivity and disk space
  3. Verify the repository user has write privileges
  4. Shorten the configured filenames if column length limits are hit
Defensive patterns

Strategy: try-catch

Try / catch

try {
  entry.saveRep( rep, metaStore, id_job );
} catch ( KettleException e ) {
  logError( "Repository save failed for id_job=" + id_job + ": " + e.getCause(), e );
  throw e;
}

Prevention

When it happens

Trigger: Saving a job containing an xsdvalidator entry where rep.saveJobEntryAttribute throws KettleDatabaseException.

Common situations: Repository DB connection lost mid-save; disk full or constraint violation on the repository; read-only repository; value too long for the attribute column.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/2bf036c7b6d17ac8. Report an issue: GitHub.

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java:144

    try {
      xmlfilename = rep.getJobEntryAttributeString( id_jobentry, "xmlfilename" );
      xsdfilename = rep.getJobEntryAttributeString( id_jobentry, "xsdfilename" );
      allowExternalEntities =
        Boolean.parseBoolean( rep.getJobEntryAttributeString( id_jobentry, "allowExternalEntities" ) );
    } catch ( KettleException dbe ) {
      throw new KettleException( "Unable to load job entry of type 'xsdvalidator' from the repository for id_jobentry="
          + id_jobentry, dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xmlfilename", xmlfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xsdfilename", xsdfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "allowExternalEntities", allowExternalEntities );

    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( "Unable to save job entry of type 'xsdvalidator' to the repository for id_job="
          + id_job, dbe );
    }
  }

  public String getRealxmlfilename() {
    return environmentSubstitute( getxmlFilename() );
  }

  public String getRealxsdfilename() {
    return environmentSubstitute( getxsdFilename() );
  }

  public Result execute( Result previousResult, int nr ) {
    Result result = previousResult;
    result.setResult( false );

    String realxmlfilename = getRealxmlfilename();
    String realxsdfilename = getRealxsdfilename();

View on GitHub (pinned to f3058517a1)