pentaho/pentaho-kettle · error · ContentIOException
Not found:
Error message
Not found:
What it means
FileObjectContentLocation.getEntry(name) resolves the child FileObject for the given name and throws ContentIOException("Not found:" + child) when the resolved child does not exist in the repository. Reading a report entry from the URL repository requires the entry to already exist; lookups are not lazy.
Solutions
- List the location's content entities (getContentNames/getChildren) and use an exact existing name
- Check filename case and extension — resolution is case-sensitive on most filesystems
- Generate/write the entry before reading it (execute the export task first)
- Guard the call: check file.resolveFile(name).exists() before getEntry
Example fix
// before
ContentEntity entity = location.getEntry( "report.PDF" );
// after
String name = "report.pdf";
if ( !location.hasContentEntity( name ) ) {
throw new ContentIOException( "Entry missing: " + name );
}
ContentEntity entity = location.getEntry( name ); Defensive patterns
Strategy: validation
Validate before calling
String name = "report.pdf";
if ( location.hasContentEntity( name ) == false ) {
throw new ContentIOException( "Entry not present: " + name );
} Try / catch
try {
ContentEntity entity = location.getEntry( name );
} catch ( ContentIOException e ) {
logError( "Missing repository entry '" + name + "' in "
+ location.getBackend().getName().getURI(), e );
} Prevention
- Verify entry names via getChildren/getContentNames before lookup
- Respect filesystem case sensitivity when naming entries
- Ensure the export task completed and wrote the entry before reading
- Guard against external cleanup jobs deleting generated reports
When it happens
Trigger: Calling getEntry with a name that resolves (via backend.resolveFile(name)) to a non-existent child — name mismatch, wrong case, or the entry was never written.
Common situations: Requesting a report file that was never generated or was deleted; case-sensitivity mismatch on Linux filesystems; using an invalid name (also flagged by the preceding IllegalArgumentException for invalid names); stale cached references after the file was removed.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Not File nor directory.
- The given backend-file is not a directory.
- AbstractFileErrorHandler.Exception.CouldNotCreateFileErrorHandlerForFile
- Append file in repository is not possible
- [ + ArgList[0] + ] is not a file!
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b84669da8b5c2576.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/pentaho-reporting/impl/src/main/java/org/pentaho/di/trans/steps/pentahoreporting/urlrepository/FileObjectContentLocation.java:124
}
/**
* Returns the content entity with the given name. If the entity does not exist, an Exception will be raised.
*
* @param name the name of the entity to be retrieved.
* @return the content entity for this name, never null.
* @throws ContentIOException if an repository error occured.
*/
public ContentEntity getEntry( final String name ) throws ContentIOException {
try {
if ( RepositoryUtilities.isInvalidPathName( name ) ) {
throw new IllegalArgumentException( "The name given is not valid." );
}
final FileObject file = getBackend();
final FileObject child = file.resolveFile( name );
if ( child.exists() == false ) {
throw new ContentIOException( "Not found:" + child );
}
if ( child.isFolder() ) {
return new FileObjectContentLocation( this, child );
} else if ( child.isFile() ) {
return new FileObjectContentItem( this, child );
} else {
throw new ContentIOException( "Not File nor directory." );
}
} catch ( FileSystemException e ) {
throw new RuntimeException( e );
}
}
/**
* Creates a new data item in the current location. This method must never return null. This method will fail if an
* entity with the same name exists in this location.
*View on GitHub (pinned to f3058517a1)