pentaho/pentaho-kettle · error · KettleXMLException
Unable to load job entry of type 'xsdvalidator' from XML…
Error message
Unable to load job entry of type 'xsdvalidator' from XML node
What it means
JobEntryXSDValidator.loadXML rethrows KettleXMLException when the job entry cannot be deserialized from its XML <entry> node. It wraps failures in XMLHandler tag reads or super.loadXML, keeping the original cause.
Solutions
- Inspect the wrapped cause exception for the exact XML parsing problem
- Re-export or re-save the job from Spoon to regenerate valid XML
- Check the <entry> node contains the expected xsdvalidator fields
- Verify the file encoding is valid UTF-8
Defensive patterns
Strategy: try-catch
Try / catch
try {
entry.loadXML( entrynode, databases, slaveServers );
} catch ( KettleXMLException e ) {
logError( "xsdvalidator entry load failed: " + e.getCause(), e );
throw e;
} Prevention
- Edit jobs only through Spoon, not by hand-editing .kjb files
- Keep PDI versions consistent between authors and runners
- Back up job files before editing
- Validate .kjb XML well-formedness after external processing
When it happens
Trigger: Loading a .kjb job whose <entry type='xsdvalidator'> node is malformed or unreadable via XMLHandler.getTagValue / super.loadXML.
Common situations: Hand-edited or corrupted .kjb files; job XML written by a newer PDI version containing unexpected structure; encoding issues in the job file.
Understand the failure class
Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.
Related errors
- Unable to load job entry of type 'xslt' from XML node
- JobCopyFiles.Error.Exception.UnableLoadXML
- JobEntryCopyMoveResultFilenames.CanNotLoadFromXML
- JobEntryMSAccessBulkLoad.Meta.UnableLoadXML
- JobEntrySuccess.Meta.UnableToLoadFromXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/d7a803cecc376aa9.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java:120
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "xmlfilename", xmlfilename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "xsdfilename", xsdfilename ) );
retval.append( " " ).append( XMLHandler.addTagValue( "allowExternalEntities", allowExternalEntities ) );
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 );
xmlfilename = XMLHandler.getTagValue( entrynode, "xmlfilename" );
xsdfilename = XMLHandler.getTagValue( entrynode, "xsdfilename" );
allowExternalEntities = YES.equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "allowExternalEntities" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load job entry of type 'xsdvalidator' from XML node", xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
xmlfilename = rep.getJobEntryAttributeString( id_jobentry, "xmlfilename" );
xsdfilename = rep.getJobEntryAttributeString( id_jobentry, "xsdfilename" );
allowExternalEntities =
Boolean.parseBoolean( rep.getJobEntryAttributeString( id_jobentry, "allowExternalEntities" ) );
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'xsdvalidator' from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {View on GitHub (pinned to f3058517a1)