pentaho/pentaho-kettle · error · KettleException

Unable to save job entry of type 'xslt' to the repository…

Error message

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

What it means

JobEntryXSLT.saveRep rethrows KettleException when writing the entry's attributes, including per-index output_property_name/output_property_value rows, to the repository fails with a KettleDatabaseException.

Solutions

  1. Read the wrapped KettleDatabaseException for the SQL error
  2. Check repository connectivity and disk space
  3. Verify write privileges on the repository
  4. Reduce or shorten output property names/values if column 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 with an XSLT entry where any rep.saveJobEntryAttribute call (including the output-property loop) throws KettleDatabaseException.

Common situations: Repository DB connection dropped during save; constraint or column-length violations; read-only repository user; very many output properties.

Related errors


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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java:289

    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xmlfilename", xmlfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xslfilename", xslfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "outputfilename", outputfilename );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "iffileexists", iffileexists );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "addfiletoresult", addfiletoresult );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "filenamesfromprevious", filenamesfromprevious );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "xsltfactory", xsltfactory );

      for ( int i = 0; i < parameterName.length; i++ ) {
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_field", parameterField[i] );
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_name", parameterName[i] );
      }
      for ( int i = 0; i < outputPropertyName.length; i++ ) {
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "output_property_name", outputPropertyName[i] );
        rep.saveJobEntryAttribute( id_job, getObjectId(), i, "output_property_value", outputPropertyValue[i] );
      }
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( "Unable to save job entry of type 'xslt' to the repository for id_job=" + id_job, dbe );
    }
  }

  public String getXSLTFactory() {
    return xsltfactory;
  }

  public void setXSLTFactory( String xsltfactoryin ) {
    xsltfactory = xsltfactoryin;
  }

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

  public String getoutputfilename() {
    return environmentSubstitute( getoutputFilename() );
  }

View on GitHub (pinned to f3058517a1)