{"record":{"id":"240854910dfdb2e1","repo":"pentaho/pentaho-kettle","slug":"jobdostounix-error-exception-unableloadxml","errorCode":null,"errorMessage":"JobDosToUnix.Error.Exception.UnableLoadXML","messagePattern":"JobDosToUnix\\.Error\\.Exception\\.UnableLoadXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/dostounix/JobEntryDosToUnix.java","lineNumber":243,"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\n        source_filefolder[i] = XMLHandler.getTagValue( fnode, \"source_filefolder\" );\n        wildcard[i] = XMLHandler.getTagValue( fnode, \"wildcard\" );\n        conversionTypes[i] =\n          getConversionTypeByCode( Const.NVL( XMLHandler.getTagValue( fnode, \"ConversionType\" ), \"\" ) );\n      }\n    } catch ( KettleXMLException xe ) {\n\n      throw new KettleXMLException(\n        BaseMessages.getString( PKG, \"JobDosToUnix.Error.Exception.UnableLoadXML\" ), 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      arg_from_previous = rep.getJobEntryAttributeBoolean( id_jobentry, \"arg_from_previous\" );\n      include_subfolders = rep.getJobEntryAttributeBoolean( id_jobentry, \"include_subfolders\" );\n\n      nr_errors_less_than = rep.getJobEntryAttributeString( id_jobentry, \"nr_errors_less_than\" );\n      success_condition = rep.getJobEntryAttributeString( id_jobentry, \"success_condition\" );\n      resultfilenames = rep.getJobEntryAttributeString( id_jobentry, \"resultfilenames\" );\n\n      // How many arguments?\n      int argnr = rep.countNrJobEntryAttributes( id_jobentry, \"source_filefolder\" );\n      allocate( argnr );\n","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/dostounix/JobEntryDosToUnix.java#L225-L261","documentation":"Thrown when the XML for a 'DOS to Unix' job entry cannot be parsed in loadXML(), e.g. while reading its file/wildcard/ConversionType fields. It wraps the original KettleXMLException. Means the job entry's XML block is malformed or structurally unexpected.","triggerScenarios":"Calling loadXML() (via loading a .kjb file or fromXMLString) where XMLHandler.getSubNodeByNr/getTagValue raises KettleXMLException on the entry's <fields>/<field> structure.","commonSituations":"Corrupted or hand-edited .kjb files; files written by an incompatible Pentaho/Kettle version; wrong node passed to loadXML; truncated export.","solutions":["Validate the .kjb file XML (xmllint) and repair the DosToUnix entry's <fields> block","Recreate/re-export the job entry from Spoon","Align Pentaho versions between file producer and consumer","Check the chained 'xe' cause for the exact parse error location"],"exampleFix":"// before\nentry.loadXML(entrynode, databases, slaveServers, rep, metaStore); // raw KettleXMLException\n// after\ntry {\n  entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  logError(\"DosToUnix XML invalid: \" + e.getMessage());\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"Document doc = XMLHandler.loadXMLFile(new File(kjbPath));\nif (doc == null) throw new IllegalArgumentException(\"Invalid XML: \" + kjbPath);\nNode entry = XMLHandler.getSubNode(doc.getDocumentElement(), \"entry\");\nif (XMLHandler.getSubNode(entry, \"fields\") == null) {\n  throw new IllegalArgumentException(\"DosToUnix entry missing <fields>\");\n}","typeGuard":"boolean isEntryNode(Node node) {\n  return node != null && \"entry\".equals(node.getNodeName());\n}","tryCatchPattern":"try {\n  entry.loadXML(entrynode, databases, slaveServers, rep, metaStore);\n} catch (KettleXMLException e) {\n  logError(\"DosToUnix XML parse failed: \" + e.getMessage(), e.getCause());\n  throw e;\n}","preventionTips":["Validate job XML externally before loading programmatically","Avoid editing .kjb files by hand","Keep Kettle/Pentaho versions aligned between writer and reader","Keep the chained KettleXMLException cause in logs for diagnosis"],"tags":["kettle","xml","parsing","job-entry"],"backgroundTag":"json-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"}