pentaho/pentaho-kettle · error · KettleXMLException
ERROR_0001
ERROR_0001
Error message
JobEntryPGPVerify.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node
What it means
JobEntryPGPVerify.loadXML wraps any KettleXMLException thrown while reading this entry's XML node (gpglocation, filename, detachedfilename, useDetachedSignature tags) into a KettleXMLException with the ERROR_0001 'Cannot load job entry from XML node' message. The parser error is attached as the cause. It means the job's XML representation could not be deserialized into this entry.
Solutions
- Open the .kjb in an XML validator or Spoon to find the malformed node and fix the XML syntax
- Restore the job file from version control or backup
- If produced by another tool/version, re-export the job with a compatible Pentaho version
Example fix
// before
Job job = new Job(null, metaStore, rep, name, rep.getJobObjectId(name)); // fails on bad XML
// after
try {
job = new Job(null, metaStore, rep, name, rep.getJobObjectId(name));
} catch (KettleXMLException e) {
logError("Invalid job XML for PGP verify entry: " + e.getCause(), e);
// fall back to backup copy of the .kjb
} Defensive patterns
Strategy: try-catch
Validate before calling
// before loading a .kjb
Document doc = XMLHandler.loadXMLFile(kjbFile);
if (doc == null) throw new KettleException("Job file is not valid XML: " + kjbFile); Try / catch
try {
jobMeta = new JobMeta(inputStream, null, null);
} catch (KettleXMLException e) {
logError("Cannot parse job XML: " + e.getCause(), e);
// restore from backup or fix the .kjb
} Prevention
- Don't hand-edit .kjb files; use Spoon
- Keep job files in version control so malformed edits are recoverable
- Verify file integrity after transfers (size/checksum) before loading
When it happens
Trigger: Loading a job from a .kjb file (or XML string) where XMLHandler.getTagValue parsing of the PGP verify entry node throws KettleXMLException: malformed XML, or the entry's XML structure is invalid/unexpected.
Common situations: Hand-edited .kjb file with broken XML; file truncated by a bad transfer; XML produced by a newer/older Pentaho version with an incompatible node layout; encoding problems in the file.
Related errors
- JobDosToUnix.Error.Exception.UnableLoadXML
- JobEntryDeleteFolders.UnableToLoadFromXml
- JobEntryDeleteResultFilenames.CanNotLoadFromXML
- JobEntrySimple.Error.Exception.UnableLoadXML
- JobFoldersCompare.Meta.UnableLoadXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/473bebc75ac31986.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/pgpverify/JobEntryPGPVerify.java:105
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "gpglocation", gpglocation ) );
retval.append( " " ).append( XMLHandler.addTagValue( "filename", filename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "detachedfilename", detachedfilename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "useDetachedSignature", useDetachedSignature ) );
return retval.toString();
}
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
gpglocation = XMLHandler.getTagValue( entrynode, "gpglocation" );
filename = XMLHandler.getTagValue( entrynode, "filename" );
detachedfilename = XMLHandler.getTagValue( entrynode, "detachedfilename" );
useDetachedSignature = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "useDetachedSignature" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryPGPVerify.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node" ), xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
gpglocation = rep.getJobEntryAttributeString( id_jobentry, "gpglocation" );
filename = rep.getJobEntryAttributeString( id_jobentry, "filename" );
detachedfilename = rep.getJobEntryAttributeString( id_jobentry, "detachedfilename" );
useDetachedSignature = rep.getJobEntryAttributeBoolean( id_jobentry, "useDetachedSignature" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryPGPVerify.ERROR_0002_Cannot_Load_Job_From_Repository", id_jobentry ), dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {View on GitHub (pinned to f3058517a1)