{"record":{"id":"81213553049fd6a8","repo":"pentaho/pentaho-kettle","slug":"jobentrydeletefiles-unabletoloadfromxml","errorCode":null,"errorMessage":"JobEntryDeleteFiles.UnableToLoadFromXml","messagePattern":"JobEntryDeleteFiles\\.UnableToLoadFromXml","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/deletefiles/JobEntryDeleteFiles.java","lineNumber":154,"sourceCode":"    Repository rep, IMetaStore metaStore ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      argFromPrevious = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"arg_from_previous\" ) );\n      includeSubfolders = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"include_subfolders\" ) );\n\n      Node fields = XMLHandler.getSubNode( entrynode, \"fields\" );\n\n      int numberOfFields = XMLHandler.countNodes( fields, \"field\" );\n      allocate( numberOfFields );\n\n      for ( int i = 0; i < numberOfFields; i++ ) {\n        Node fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\n\n        arguments[i] = XMLHandler.getTagValue( fnode, \"name\" );\n        filemasks[i] = XMLHandler.getTagValue( fnode, \"filemask\" );\n      }\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"JobEntryDeleteFiles.UnableToLoadFromXml\" ), xe );\n    }\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      argFromPrevious = rep.getJobEntryAttributeBoolean( id_jobentry, \"arg_from_previous\" );\n      includeSubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, \"include_subfolders\" );\n\n      int numberOfArgs = rep.countNrJobEntryAttributes( id_jobentry, \"name\" );\n      allocate( numberOfArgs );\n\n      for ( int i = 0; i < numberOfArgs; i++ ) {\n        arguments[i] = rep.getJobEntryAttributeString( id_jobentry, i, \"name\" );\n        filemasks[i] = rep.getJobEntryAttributeString( id_jobentry, i, \"filemask\" );\n      }\n    } catch ( KettleException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"JobEntryDeleteFiles.UnableToLoadFromRepo\", String","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/deletefiles/JobEntryDeleteFiles.java#L136-L172","documentation":"JobEntryDeleteFiles.loadXML throws this KettleXMLException when parsing the delete-files entry's XML node fails, including reading the <fields>/<field> blocks with 'name' and 'filemask' sub-tags. The original KettleXMLException is chained. It means the wildcard file-delete entry could not be deserialized from the job XML.","triggerScenarios":"loadXML with a malformed entrynode, missing/broken <fields> structure, or XMLHandler throwing while fetching the field sub-nodes.","commonSituations":"Hand-edited .kjb where the fields block was truncated; job XML from another version with a different structure; copy-paste corruption; file truncation during transfer.","solutions":["Open the .kjb and verify the <fields> block with <field><name>...</name><filemask>...</filemask></field> entries is intact","Recreate the Delete files entry in Spoon and re-save the job","Validate the full XML with a parser to locate the malformed node","Check the chained cause (xe) for the exact XML path that failed"],"exampleFix":"// before\n<fields>\n  <field>\n    <name>/tmp/logs/</name>\n</fields>\n// after\n<fields>\n  <field>\n    <name>/tmp/logs/</name>\n    <filemask>.*\\\\.log</filemask>\n  </field>\n</fields>","handlingStrategy":"validation","validationCode":"// before loadXML\nNode fields = XMLHandler.getSubNode(entrynode, \"fields\");\nif (fields == null) throw new KettleXMLException(\"Missing <fields> in Delete files entry\");\nint n = XMLHandler.countNodes(fields, \"field\");\nif (n == 0) throw new KettleXMLException(\"No <field> entries in Delete files entry\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  log.error(\"DeleteFiles entry XML invalid\", e.getCause());\n  // fix <fields>/<field><name>/<filemask> structure or recreate in Spoon\n  throw e;\n}","preventionTips":["Ensure each <field> has both <name> and <filemask> children","Validate job XML before import","Avoid hand-editing .kjb files","Keep templates for generated XML up to date with schema"],"tags":["kettle","xml","parsing"],"backgroundTag":"xml-parse-error","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}