{"record":{"id":"9ac6dfda4a6d06ac","repo":"pentaho/pentaho-kettle","slug":"jobpgpencryptfiles-error-exception-unableloadxml","errorCode":null,"errorMessage":"JobPGPEncryptFiles.Error.Exception.UnableLoadXML","messagePattern":"JobPGPEncryptFiles\\.Error\\.Exception\\.UnableLoadXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/pgpencryptfiles/JobEntryPGPEncryptFiles.java","lineNumber":288,"sourceCode":"\n      Node fields = XMLHandler.getSubNode( entrynode, \"fields\" );\n\n      // How many field arguments?\n      int nrFields = XMLHandler.countNodes( fields, \"field\" );\n      allocate( nrFields );\n\n      // Read them all...\n      for ( int i = 0; i < nrFields; i++ ) {\n        Node fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\n        action_type[i] = getActionTypeByCode( Const.NVL( XMLHandler.getTagValue( fnode, \"action_type\" ), \"\" ) );\n        source_filefolder[i] = XMLHandler.getTagValue( fnode, \"source_filefolder\" );\n        userid[i] = XMLHandler.getTagValue( fnode, \"userid\" );\n        destination_filefolder[i] = XMLHandler.getTagValue( fnode, \"destination_filefolder\" );\n        wildcard[i] = XMLHandler.getTagValue( fnode, \"wildcard\" );\n      }\n    } catch ( KettleXMLException xe ) {\n\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"JobPGPEncryptFiles.Error.Exception.UnableLoadXML\" ), xe );\n    }\n  }\n\n  private static int getActionTypeByCode( String tt ) {\n    if ( tt == null ) {\n      return 0;\n    }\n\n    for ( int i = 0; i < actionTypeCodes.length; i++ ) {\n      if ( actionTypeCodes[i].equalsIgnoreCase( tt ) ) {\n        return i;\n      }\n    }\n    return 0;\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,","sourceCodeStart":270,"sourceCodeEnd":306,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/pgpencryptfiles/JobEntryPGPEncryptFiles.java#L270-L306","documentation":"KettleXMLException with key JobPGPEncryptFiles.Error.Exception.UnableLoadXML is thrown by JobEntryPGPEncryptFiles.loadXML when parsing the job entry's XML definition fails. It wraps the original KettleXMLException while reading fields such as source filefolder, userid, destination_filefolder, and wildcard from the <fields> nodes of a .kjb job file.","triggerScenarios":"Loading a .kjb job whose JobPGPEncryptFiles entry XML is malformed: missing/wrong <fields> structure, unexpected node types, or XMLHandler.getTagValue encountering invalid XML.","commonSituations":"Hand-edited job files; job exported from a newer Pentaho version and loaded in an older one; truncated or corrupted .kjb files; encoding/BOM issues after external edits.","solutions":["Open the .kjb in Spoon and fix or re-create the PGP Encrypt Files entry to regenerate valid XML.","Validate the <fields> block contains the expected child tags (filefolder, userid, destination_filefolder, wildcard).","Load the job with the same (or newer) Pentaho Kettle version that produced it.","Check the cause chain (getCause() KettleXMLException) for the exact XML parse error and line."],"exampleFix":"// before\n<fields>\n  <filefolder>file.txt</filefolder>\n</fields>\n// after\n<fields>\n  <filefolder>file.txt</filefolder>\n  <userid>user@example.com</userid>\n  <destination_filefolder>out/</destination_filefolder>\n  <wildcard>.*\\.txt</wildcard>\n</fields>","handlingStrategy":"validation","validationCode":"// Validate the job XML before loading:\norg.w3c.dom.Document doc = XMLHandler.loadXMLFile(new java.io.File(jobPath));\nif (XMLHandler.getSubNode(doc, \"job\") == null) {\n  throw new IllegalStateException(\"Not a valid Kettle job file: \" + jobPath);\n}","typeGuard":null,"tryCatchPattern":"try {\n  jobMeta = new JobMeta(jobPath, rep, metaStore);\n} catch (KettleXMLException xe) {\n  if (xe.getMessage().contains(\"UnableLoadXML\")) {\n    // entry XML corrupt — inspect cause for parse line, re-export from Spoon\n  }\n}","preventionTips":["Never hand-edit .kjb files; use Spoon","Keep producer and consumer Kettle versions compatible","Validate XML well-formedness before loading externally generated jobs"],"tags":["xml","kettle","job-entry","serialization"],"backgroundTag":"schema-validation-failed","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"}