pentaho/pentaho-kettle · error · KettleXMLException

Unable to load job entry of type 'SendNagiosPassiveCheck'…

Error message

Unable to load job entry of type 'SendNagiosPassiveCheck' from XML node

What it means

JobEntrySendNagiosPassiveCheck.loadXML wraps any KettleXMLException thrown while parsing the SendNagiosPassiveCheck entry's XML node (hostname, port, message, encryptionMode, level, etc.) into a KettleXMLException with the message 'Unable to load job entry of type SendNagiosPassiveCheck from XML node'. The parse error is the cause. It means the entry's XML could not be deserialized.

Solutions

  1. Validate and repair the XML for this entry node (check encryptionMode/level codes are valid)
  2. Restore the .kjb from backup or version control
  3. Recreate the SendNagiosPassiveCheck entry in Spoon and re-save the job

Example fix

// before
JobMeta job = new JobMeta(fileInputStream, null, null); // throws on bad node
// after
try {
  job = new JobMeta(fileInputStream, null, null);
} catch (KettleXMLException e) {
  logError("Bad XML in Nagios passive check entry: " + e.getCause(), e);
  // use backup copy or fix the entry XML
}
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("Cannot load SendNagiosPassiveCheck entry: " + e.getCause(), e);
  // fix the entry XML or restore from backup
}

Prevention

When it happens

Trigger: Loading a .kjb file where the <entry type='SEND_NAGIOS_PASSIVE_CHECK'> node fails XMLHandler parsing, or getEncryptionModeByCode/getLevelByCode conversion within the try block throws KettleXMLException on an unknown code in the XML.

Common situations: Hand-edited .kjb with an invalid encryptionMode/level code; job XML from an incompatible Pentaho version; truncated or corrupt file transfer.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/43c1afe9c738e68f. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/sendnagiospassivecheck/JobEntrySendNagiosPassiveCheck.java:259

  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
    Repository rep, IMetaStore metaStore ) throws KettleXMLException {
    try {
      super.loadXML( entrynode, databases, slaveServers );
      port = XMLHandler.getTagValue( entrynode, "port" );
      serverName = XMLHandler.getTagValue( entrynode, "servername" );
      responseTimeOut = XMLHandler.getTagValue( entrynode, "responseTimeOut" );
      connectionTimeOut = XMLHandler.getTagValue( entrynode, "connectionTimeOut" );
      password = XMLHandler.getTagValue( entrynode, "password" );

      senderServerName = XMLHandler.getTagValue( entrynode, "senderServerName" );
      senderServiceName = XMLHandler.getTagValue( entrynode, "senderServiceName" );
      message = XMLHandler.getTagValue( entrynode, "message" );

      encryptionMode = getEncryptionModeByCode( XMLHandler.getTagValue( entrynode, "encryptionMode" ) );
      level = getLevelByCode( XMLHandler.getTagValue( entrynode, "level" ) );

    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( "Unable to load job entry of type 'SendNagiosPassiveCheck' from XML node", xe );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      port = rep.getJobEntryAttributeString( id_jobentry, "port" );
      serverName = rep.getJobEntryAttributeString( id_jobentry, "servername" );
      password = rep.getJobEntryAttributeString( id_jobentry, "password" );
      responseTimeOut = rep.getJobEntryAttributeString( id_jobentry, "responseTimeOut" );
      connectionTimeOut = rep.getJobEntryAttributeString( id_jobentry, "connectionTimeOut" );

      senderServerName = rep.getJobEntryAttributeString( id_jobentry, "senderServerName" );
      senderServiceName = rep.getJobEntryAttributeString( id_jobentry, "senderServiceName" );

      message = rep.getJobEntryAttributeString( id_jobentry, "message" );

      encryptionMode = getEncryptionModeByCode( rep.getJobEntryAttributeString( id_jobentry, "encryptionMode" ) );

View on GitHub (pinned to f3058517a1)