pentaho/pentaho-kettle · error · org.pentaho.di.core.exception.KettleValueException
KettleValueException with no message (rethrow of…
Error message
KettleValueException with no message (rethrow of KettleFileNotFoundException from deprecated loadFileContentInBinary)
What it means
This deprecated overload of loadFileContentInBinary catches the KettleFileNotFoundException thrown by the full version and rethrows it as a bare new KettleValueException() with NO message or cause. The original filename and reason are lost, making this error notoriously opaque.
Solutions
- Switch to the 4-arg overload loadFileContentInBinary(bowl, metaA, dataA, failIfNoFile) which propagates the real exception
- Pre-check file existence and skip the call when the file is missing
- Call the newer non-deprecated API so KettleFileNotFoundException with the path is preserved
- Log the input filename before the call to recover which file failed
Example fix
// before Object content = ValueDataUtil.loadFileContentInBinary(bowl, metaA, dataA); // throws empty KettleValueException // after Object content = ValueDataUtil.loadFileContentInBinary(bowl, metaA, dataA, true); // preserves KettleFileNotFoundException
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: pre-check file existence via the value's filename
String filename = metaA.getString(dataA);
FileObject f = KettleVFS.getFileObject(filename);
if (f == null || !f.exists()) {
throw new FileNotFoundException("Binary content file missing: " + filename);
} Try / catch
try {
content = ValueDataUtil.loadFileContentInBinary(bowl, metaA, dataA);
} catch (KettleValueException e) {
// message-less by design; check the filename yourself
log.error("Binary file load failed for: " + metaA.getString(dataA));
throw e;
} Prevention
- Migrate off this deprecated overload to the 4-arg variant that preserves the cause
- Log the target filename before invoking so failures are attributable
- Pre-validate existence with KettleVFS before the call
- Search usages and replace during upgrades — the empty exception hides root causes
When it happens
Trigger: Calling ValueDataUtil.loadFileContentInBinary(bowl, metaA, dataA) where the file named in dataA does not exist — the inner call's KettleFileNotFoundException is swallowed and replaced by a message-less KettleValueException.
Common situations: Legacy transformations using the binary file content calculator on a missing/unmounted file; paths valid on dev machine but absent in production.
Understand the failure class
Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.
Related errors
- Cannot open control file
- Cannot open data file
- CubeInputMeta.Exception.ErrorOpeningOrReadingCubeFile
- ExcelInput.Exception.CanNotCreateFileObject
- ExcelInput.Exception.MissingRequiredFiles
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/820576b1f2763e24.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/row/ValueDataUtil.java:674
}
if ( dataA != null && dataB == null ) {
return dataA;
}
return plus( metaA, dataA, metaB, dataB );
}
/**
* @deprecated Use {@link ValueDataUtil#loadFileContentInBinary(ValueMetaInterface, Object, boolean)} instead
*/
@Deprecated
public static Object loadFileContentInBinary( Bowl bowl, ValueMetaInterface metaA, Object dataA )
throws KettleValueException {
Object content = null;
try {
content = loadFileContentInBinary( bowl, metaA, dataA, true );
} catch ( KettleFileNotFoundException e ) {
throw new KettleValueException();
}
return content;
}
/**
*
* @param metaA
* The ValueMetaInterface
* @param dataA
* Filename
* @param failIfNoFile
* Indicates if the transformation should fail if no file is found
* @return File's content in binary
* @throws KettleValueException
* @throws KettleFileNotFoundException
*/
public static byte[] loadFileContentInBinary( Bowl bowl, ValueMetaInterface metaA, Object dataA,
boolean failIfNoFile ) throws KettleValueException, KettleFileNotFoundException {View on GitHub (pinned to f3058517a1)