{"record":{"id":"3f5da6d0a9332434","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-xslt-from-xml-node","errorCode":null,"errorMessage":"Unable to load job entry of type 'xslt' from XML node","messagePattern":"Unable to load job entry of type 'xslt' from XML node","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java","lineNumber":234,"sourceCode":"      int nrparams = XMLHandler.countNodes( parametersNode, \"parameter\" );\n\n      Node parametersOutputProps = XMLHandler.getSubNode( entrynode, \"outputproperties\" );\n      int nroutputprops = XMLHandler.countNodes( parametersOutputProps, \"outputproperty\" );\n      allocate( nrparams, nroutputprops );\n\n      for ( int i = 0; i < nrparams; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( parametersNode, \"parameter\", i );\n        parameterField[i] = XMLHandler.getTagValue( anode, \"field\" );\n        parameterName[i] = XMLHandler.getTagValue( anode, \"name\" );\n      }\n      for ( int i = 0; i < nroutputprops; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( parametersOutputProps, \"outputproperty\", i );\n        outputPropertyName[i] = XMLHandler.getTagValue( anode, \"name\" );\n        outputPropertyValue[i] = XMLHandler.getTagValue( anode, \"value\" );\n      }\n\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'xslt' from XML node\", 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      xmlfilename = rep.getJobEntryAttributeString( id_jobentry, \"xmlfilename\" );\n      xslfilename = rep.getJobEntryAttributeString( id_jobentry, \"xslfilename\" );\n      outputfilename = rep.getJobEntryAttributeString( id_jobentry, \"outputfilename\" );\n      iffileexists = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"iffileexists\" );\n      addfiletoresult = rep.getJobEntryAttributeBoolean( id_jobentry, \"addfiletoresult\" );\n      filenamesfromprevious = rep.getJobEntryAttributeBoolean( id_jobentry, \"filenamesfromprevious\" );\n      xsltfactory = rep.getJobEntryAttributeString( id_jobentry, \"xsltfactory\" );\n      if ( xsltfactory == null ) {\n        xsltfactory = FACTORY_JAXP;\n      }\n\n      int nrparams = rep.countNrJobEntryAttributes( id_jobentry, \"param_name\" );","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java#L216-L252","documentation":"JobEntryXSLT.loadXML rethrows KettleXMLException when the XSLT job entry cannot be deserialized from its XML <entry> node, including failures reading the nested output-property list. The original cause is wrapped.","triggerScenarios":"Loading a .kjb job whose <entry type='xslt'> node, including its outputproperty sub-nodes, is malformed or unreadable.","commonSituations":"Corrupted or hand-edited .kjb files; XML written by a different PDI version with a changed schema; truncated job file transfers.","solutions":["Inspect the wrapped cause for the exact XMLHandler failure","Re-save the job from Spoon to regenerate valid XML","Verify outputproperty sub-nodes have name/value tags","Validate the .kjb file is well-formed XML","Check the file was not truncated during transfer"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  entry.loadXML( entrynode, databases, slaveServers );\n} catch ( KettleXMLException e ) {\n  logError( \"xslt entry load failed: \" + e.getCause(), e );\n  throw e;\n}","preventionTips":["Avoid hand-editing .kjb files","Ensure all outputproperty sub-nodes carry name and value tags","Standardize PDI versions across environments","Validate job XML after any external transformation"],"tags":["pdi","xml-deserialization","job-entry","xslt"],"backgroundTag":"json-unmarshal-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"}