pentaho/pentaho-kettle · error · InvocationTargetException
RepositoryExportDialog.Error.CreateUpdate
Error message
RepositoryExportDialog.Error.CreateUpdate
What it means
In RepositoryExportProgressDialog's run() (the cancellable IRunnableWithProgress body), any KettleException thrown while exporting repository objects is wrapped in an InvocationTargetException with the localized message 'RepositoryExportDialog.Error.CreateUpdate' plus a stack tracker. It signals the repository export operation itself failed.
Solutions
- Inspect the embedded KettleException stack tracker (shown in the ErrorDialog) for the root cause
- Verify repository connectivity and retry the export
- Export a smaller scope (single directory/objects) to isolate the failing object
- Check the destination filename/directory is valid and writable
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check repository connectivity before opening the export dialog
if (!rep.isConnected()) { showError("Repository not connected"); return; } Try / catch
try { runExportProgressDialog(...); } catch (InvocationTargetException ite) { Throwable root = ite; while (root.getCause() != null) root = root.getCause(); log.error("Export failed: " + root.getMessage(), root); showError(BaseMessages.getString(PKG, "RepositoryExportDialog.Error.CreateUpdate")); } Prevention
- Verify repository connection stability before long exports
- Export in smaller batches to reduce failure blast radius
- Check write access to the export filename up front
- Read the stack tracker in the error dialog to find the failing object
When it happens
Trigger: exporter.exportAllObjects / exportAllObjectsWithFeedback throwing KettleException during the export progress dialog — repository connection dropped mid-export, unreadable repository object, database error while reading objects, or invalid export filename.
Common situations: Network interruption to the repository database during a long export; repository object with corrupt metadata; exporting a directory the user lacks permission to read; target filename invalid causing the exporter to fail.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- Unable to complete revision deletion
- AbsSecurityManager.ERROR_0004_UNABLE_TO_APPLY_LOGICAL_ROLES_TO_RUNTIME_ROLE
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0f53807d229e7efa.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/repository/dialog/RepositoryExportProgressDialog.java:111
// this hack is only to support dog-nail build process for <...>
// and keep base interfaces without changes - getExporter should
// directly return IRepositoryExporterFeedback.
final boolean isFeedback = ( exporter instanceof IRepositoryExporterFeedback ) ? true : false;
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException {
try {
exporter.setImportRulesToValidate( importRules );
ProgressMonitorAdapter pMonitor = new ProgressMonitorAdapter( monitor );
if ( isFeedback ) {
IRepositoryExporterFeedback fExporter = IRepositoryExporterFeedback.class.cast( exporter );
List<ExportFeedback> ret =
fExporter.exportAllObjectsWithFeedback( pMonitor, filename, dir, "all" );
list.addAll( ret );
} else {
exporter.exportAllObjects( pMonitor, filename, dir, "all" );
}
} catch ( KettleException e ) {
throw new InvocationTargetException( e, BaseMessages.getString( PKG,
"RepositoryExportDialog.Error.CreateUpdate", Const.getStackTracker( e ) ) );
}
}
};
try {
ProgressMonitorDialog pmd = new ProgressMonitorDialog( shell );
pmd.run( true, true, op );
if ( !pmd.getProgressMonitor().isCanceled() && isFeedback ) {
// show some results here.
IRepositoryExporterFeedback fExporter = IRepositoryExporterFeedback.class.cast( exporter );
showExportResultStatus( list, fExporter.isRulesViolation() );
}
} catch ( InvocationTargetException e ) {
log.logError( RepositoryExportProgressDialog.class.toString(), "Error creating repository: " + e.toString() );
log.logError( Const.getStackTracker( e ) );
new ErrorDialog( shell, BaseMessages.getString( PKG, "RepositoryExportDialog.ErrorExport.Title" ), BaseMessagesView on GitHub (pinned to f3058517a1)