pentaho/pentaho-kettle · error · KettleXMLException
Unable to load job entry of type 'ping' from XML node
Error message
Unable to load job entry of type 'ping' from XML node
What it means
JobEntryPing.loadXML wraps any KettleXMLException thrown while parsing the 'ping' job entry's XML node (hostname, timeout, nbrpaquets, pingtype, etc.) into a KettleXMLException with the fixed message 'Unable to load job entry of type ping from XML node'. The parse error is the cause. It means the ping entry's XML could not be deserialized.
Solutions
- Validate the .kjb XML and repair the malformed ping entry node
- Restore the job file from backup/version control
- Recreate the Ping job entry in Spoon and re-save the job
Example fix
// before
JobMeta job = new JobMeta(inputStream, null, null); // fails on malformed ping node
// after
try {
job = new JobMeta(inputStream, null, null);
} catch (KettleXMLException e) {
logError("Bad XML in ping job entry: " + e.getCause(), e);
// open backup copy or fix the .kjb file
} Defensive patterns
Strategy: try-catch
Validate before calling
Document doc = XMLHandler.loadXMLFile(kjbFile);
if (doc == null) throw new KettleException("Invalid job XML: " + kjbFile); Try / catch
try {
jobMeta = new JobMeta(inputStream, null, null);
} catch (KettleXMLException e) {
logError("Ping entry XML invalid: " + e.getCause(), e);
// restore backup or fix the ping entry node
} Prevention
- Edit jobs only in Spoon, not in a text editor
- Validate .kjb files after external generation or transformation
- Keep backups/version history of job files
When it happens
Trigger: Loading a .kjb job file whose <entry type='PING'> node causes XMLHandler.getTagValue/attribute parsing to throw KettleXMLException — malformed XML or an invalid nested element in the ping entry block.
Common situations: Hand-edited .kjb with broken tags inside the ping entry; truncated download of the job file; XML from an incompatible Pentaho version.
Related errors
- ERROR_0001
- JobDosToUnix.Error.Exception.UnableLoadXML
- JobEntryDeleteFolders.UnableToLoadFromXml
- JobEntryDeleteResultFilenames.CanNotLoadFromXML
- JobEntrySimple.Error.Exception.UnableLoadXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/84b5e39755b55db7.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/ping/JobEntryPing.java:141
nbrPackets = nbrPaquets;
}
timeout = XMLHandler.getTagValue( entrynode, "timeout" );
pingtype = XMLHandler.getTagValue( entrynode, "pingtype" );
if ( Utils.isEmpty( pingtype ) ) {
pingtype = classicPing;
ipingtype = iclassicPing;
} else {
if ( pingtype.equals( systemPing ) ) {
ipingtype = isystemPing;
} else if ( pingtype.equals( bothPings ) ) {
ipingtype = ibothPings;
} else {
ipingtype = iclassicPing;
}
}
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load job entry of type 'ping' from XML node", xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
hostname = rep.getJobEntryAttributeString( id_jobentry, "hostname" );
nbrPackets = rep.getJobEntryAttributeString( id_jobentry, "nbr_packets" );
// TODO: The following lines may be removed 3 versions after 2.5.0
String nbrPaquets = rep.getJobEntryAttributeString( id_jobentry, "nbrpaquets" );
if ( nbrPackets == null && nbrPaquets != null ) {
// if only nbrpaquets exists this means that the file was
// save by a version 2.5.0 ping job entry
nbrPackets = nbrPaquets;
}
timeout = rep.getJobEntryAttributeString( id_jobentry, "timeout" );
View on GitHub (pinned to f3058517a1)