pentaho/pentaho-kettle · error · KettleXMLException
JobEntrySimple.Error.Exception.UnableLoadXML
JobEntrySimple.Error.Exception.UnableLoadXML
Error message
JobEntrySimple.Error.Exception.UnableLoadXML
What it means
JobEntrySimpleEval.loadXML parses the 'simple eval' job entry's XML tags (success conditions, variable settings). Any KettleXMLException during parsing is rethrown as KettleXMLException with the localized message keyed by JobEntrySimple.Error.Exception.UnableLoadXML ('Unable to load job entry of type ... from XML node'-style text from the messages bundle).
Solutions
- Validate the .kjb XML is well-formed and the simple_eval node contains the expected tags
- Recreate the 'Simple Evaluation' job entry in Spoon and re-save
- Restore the job file from backup/version control
- Check the nested KettleXMLException cause for the exact parse error and line
Defensive patterns
Strategy: try-catch
Try / catch
try {
jobEntrySimpleEval.loadXML(entrynode, databases, metaStore);
} catch (KettleXMLException e) {
logError("Simple Eval job entry XML invalid: " + e.getCause().getMessage(), e);
// recreate the entry or restore a backup .kjb
} Prevention
- Avoid hand-editing simple_eval nodes in .kjb files
- Keep expected tags (successnumbercondition, successbooleancondition, successwhenvarset) intact when templating
- Restore from version control after failed edits
- Inspect the nested KettleXMLException cause for the exact XML error location
When it happens
Trigger: XMLHandler.getTagValue for tags like 'successnumbercondition', 'successbooleancondition', 'successwhenvarset' throws inside loadXML — malformed .kjb XML, null entrynode, or invalid nested content.
Common situations: Truncated or hand-edited .kjb files; jobs moved between Pentaho versions where tag names changed; XML escaping errors from special characters in condition values; copy-pasted node missing expected child tags.
Related errors
- ERROR_0001
- JobDosToUnix.Error.Exception.UnableLoadXML
- JobEntryDeleteFolders.UnableToLoadFromXml
- JobEntryDeleteResultFilenames.CanNotLoadFromXML
- JobFoldersCompare.Meta.UnableLoadXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/aeba6d14173ef890.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/simpleeval/JobEntrySimpleEval.java:362
valuetype = getValueTypeByCode( Const.NVL( XMLHandler.getTagValue( entrynode, "valuetype" ), "" ) );
fieldname = XMLHandler.getTagValue( entrynode, "fieldname" );
fieldtype = getFieldTypeByCode( Const.NVL( XMLHandler.getTagValue( entrynode, "fieldtype" ), "" ) );
variablename = XMLHandler.getTagValue( entrynode, "variablename" );
mask = XMLHandler.getTagValue( entrynode, "mask" );
comparevalue = XMLHandler.getTagValue( entrynode, "comparevalue" );
minvalue = XMLHandler.getTagValue( entrynode, "minvalue" );
maxvalue = XMLHandler.getTagValue( entrynode, "maxvalue" );
successcondition =
getSuccessConditionByCode( Const.NVL( XMLHandler.getTagValue( entrynode, "successcondition" ), "" ) );
successnumbercondition =
getSuccessNumberConditionByCode( Const.NVL(
XMLHandler.getTagValue( entrynode, "successnumbercondition" ), "" ) );
successbooleancondition =
getSuccessBooleanConditionByCode( Const.NVL( XMLHandler.getTagValue(
entrynode, "successbooleancondition" ), "" ) );
successwhenvarset = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "successwhenvarset" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException(
BaseMessages.getString( PKG, "JobEntrySimple.Error.Exception.UnableLoadXML" ), xe );
}
}
@Override
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
valuetype = getValueTypeByCode( Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "valuetype" ), "" ) );
fieldname = rep.getJobEntryAttributeString( id_jobentry, "fieldname" );
variablename = rep.getJobEntryAttributeString( id_jobentry, "variablename" );
fieldtype = getFieldTypeByCode( Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "fieldtype" ), "" ) );
mask = rep.getJobEntryAttributeString( id_jobentry, "mask" );
comparevalue = rep.getJobEntryAttributeString( id_jobentry, "comparevalue" );
minvalue = rep.getJobEntryAttributeString( id_jobentry, "minvalue" );
maxvalue = rep.getJobEntryAttributeString( id_jobentry, "maxvalue" );
successcondition =
getSuccessConditionByCode( Const.NVL(View on GitHub (pinned to f3058517a1)