pentaho/pentaho-kettle · error · KettleXMLException

Unable to load job entry of type 'create folder' from XML…

Error message

Unable to load job entry of type 'create folder' from XML node

What it means

Thrown by JobEntryFolderIsEmpty.loadXML when the 'folder is empty' job entry cannot be deserialized from its XML node. It wraps the KettleXMLException with a hardcoded (non-localized) message. Note the message misleadingly says 'create folder' although the entry is folderisempty. It means the entry's XML attributes could not be read.

Solutions

  1. Re-create the entry in Spoon to regenerate valid XML
  2. Verify the node contains foldername, include_subfolders, specify_wildcard and wildcard child tags
  3. Inspect the chained KettleXMLException cause for the parse error
  4. Restore the .kjb from version control or a backup

Example fix

// before
<entry name='FolderEmpty'><foldername>/data</foldername></entry>
// after
<entry name='FolderEmpty'><foldername>/data</foldername><include_subfolders>N</include_subfolders><specify_wildcard>N</specify_wildcard><wildcard></wildcard></entry>
Defensive patterns

Strategy: try-catch

Validate before calling

// Java: validate required tags before loading
if (XMLHandler.getSubNode(entrynode, "foldername") == null) {
    throw new IllegalArgumentException("folderisempty entry missing <foldername>");
}

Try / catch

try {
    jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore);
} catch (KettleXMLException e) {
    logError("Corrupt folderisempty entry XML (message says 'create folder' but is folderisempty): " + e.getMessage(), e);
    // skip or rebuild the entry
}

Prevention

When it happens

Trigger: Loading a .kjb whose <entry> node for this type is malformed or missing foldername/include_subfolders/specify_wildcard/wildcard tags, or whose super.loadXML fails on base attributes.

Common situations: Hand-edited .kjb; truncated file; XML from a different Kettle version with renamed tags; copy-paste from a 'create folder' entry producing wrong structure.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/folderisempty/JobEntryFolderIsEmpty.java:109

    retval.append( "      " ).append( XMLHandler.addTagValue( "include_subfolders", includeSubfolders ) );
    retval.append( "      " ).append( XMLHandler.addTagValue( "specify_wildcard", specifywildcard ) );
    retval.append( "      " ).append( XMLHandler.addTagValue( "wildcard", wildcard ) );
    if ( parentJobMeta != null ) {
      parentJobMeta.getNamedClusterEmbedManager().registerUrl( foldername );
    }
    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 );
      foldername = XMLHandler.getTagValue( entrynode, "foldername" );
      includeSubfolders = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "include_subfolders" ) );
      specifywildcard = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "specify_wildcard" ) );
      wildcard = XMLHandler.getTagValue( entrynode, "wildcard" );
    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( "Unable to load job entry of type 'create folder' from XML node", xe );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      foldername = rep.getJobEntryAttributeString( id_jobentry, "foldername" );
      includeSubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );
      specifywildcard = rep.getJobEntryAttributeBoolean( id_jobentry, "specify_wildcard" );
      wildcard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
    } catch ( KettleException dbe ) {
      throw new KettleException(
        "Unable to load job entry of type 'create Folder' from the repository for id_jobentry=" + id_jobentry,
        dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {

View on GitHub (pinned to f3058517a1)