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

  1. List the location's content entities (getContentNames/getChildren) and use an exact existing name
  2. Check filename case and extension — resolution is case-sensitive on most filesystems
  3. Generate/write the entry before reading it (execute the export task first)
  4. 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

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


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)