pentaho/pentaho-kettle · error · KettleXMLException

ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

Error message

JobEntryFilesExist.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

What it means

Thrown by JobEntryFilesExist.loadXML when the 'files exist' job entry cannot be deserialized from its XML node. Unlike some siblings it appends xe.getMessage() to the localized message but does NOT chain the cause, so the original stack is lost. It indicates the entry's field list XML could not be parsed.

Solutions

  1. Re-create the entry in Spoon to regenerate correct fields XML
  2. Ensure the node has <fields><field><name>...</name></field>...</fields> structure
  3. Note the message contains xe.getMessage() — use it to locate the parse problem
  4. Restore the .kjb from a known-good copy

Example fix

// before (missing fields wrapper)
<entry name='FilesExist'><name>a.txt</name></entry>
// after
<entry name='FilesExist'><fields><field><name>a.txt</name></field></fields></entry>
Defensive patterns

Strategy: validation

Validate before calling

// Java: check fields structure before loading
Node fields = XMLHandler.getSubNode(entrynode, "fields");
if (fields == null || XMLHandler.countNodes(fields, "field") == 0) {
    throw new IllegalArgumentException("filesexist entry missing <fields>/<field><name>");
}

Try / catch

try {
    jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
    logError("Corrupt filesexist entry XML: " + e.getMessage());
    // note: cause is not chained here; rely on getMessage()
}

Prevention

When it happens

Trigger: Loading a .kjb whose <entry type='filesexist'> node has a malformed or missing <fields> section with <field><name> children, or whose base attributes fail to parse.

Common situations: Hand-edited .kjb with wrong field structure; XML truncated mid-fields; version drift changing the entry's XML layout.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/filesexist/JobEntryFilesExist.java:124

    try {
      super.loadXML( entrynode, databases, slaveServers );
      filename = XMLHandler.getTagValue( entrynode, "filename" );

      Node fields = XMLHandler.getSubNode( entrynode, "fields" );

      // How many field arguments?
      int nrFields = XMLHandler.countNodes( fields, "field" );
      allocate( nrFields );

      // Read them all...
      for ( int i = 0; i < nrFields; i++ ) {
        Node fnode = XMLHandler.getSubNodeByNr( fields, "field", i );

        arguments[i] = XMLHandler.getTagValue( fnode, "name" );

      }
    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryFilesExist.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node", xe.getMessage() ) );
    }
  }

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

      // How many arguments?
      int argnr = rep.countNrJobEntryAttributes( id_jobentry, "name" );
      allocate( argnr );

      // Read them all...
      for ( int a = 0; a < argnr; a++ ) {
        arguments[a] = rep.getJobEntryAttributeString( id_jobentry, a, "name" );
      }
    } catch ( KettleException dbe ) {

View on GitHub (pinned to f3058517a1)