{"record":{"id":"e0259102f2eb2861","repo":"pentaho/pentaho-kettle","slug":"pgpencryptstreammeta-exception-unabletoreadstepinfo","errorCode":null,"errorMessage":"PGPEncryptStreamMeta.Exception.UnableToReadStepInfo","messagePattern":"PGPEncryptStreamMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStreamMeta.java","lineNumber":230,"sourceCode":"    retval.append( \"    \" + XMLHandler.addTagValue( \"keyname\", keyname ) );\n    retval.append( \"    \" + XMLHandler.addTagValue( \"keynameInField\", keynameInField ) );\n    retval.append( \"    \" + XMLHandler.addTagValue( \"keynameFieldName\", keynameFieldName ) );\n    retval.append( \"    \" + XMLHandler.addTagValue( \"streamfield\", streamfield ) );\n    retval.append( \"    \" + XMLHandler.addTagValue( \"resultfieldname\", resultfieldname ) );\n    return retval.toString();\n  }\n\n  private void readData( Node stepnode, List<DatabaseMeta> databases ) throws KettleXMLException {\n    try {\n      gpglocation = XMLHandler.getTagValue( stepnode, \"gpglocation\" );\n      keyname = XMLHandler.getTagValue( stepnode, \"keyname\" );\n\n      keynameInField = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"keynameInField\" ) );\n      keynameFieldName = XMLHandler.getTagValue( stepnode, \"keynameFieldName\" );\n      streamfield = XMLHandler.getTagValue( stepnode, \"streamfield\" );\n      resultfieldname = XMLHandler.getTagValue( stepnode, \"resultfieldname\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"PGPEncryptStreamMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      gpglocation = rep.getStepAttributeString( id_step, \"gpglocation\" );\n      keyname = rep.getStepAttributeString( id_step, \"keyname\" );\n      keynameInField = rep.getStepAttributeBoolean( id_step, \"keynameInField\" );\n      keynameFieldName = rep.getStepAttributeString( id_step, \"keynameFieldName\" );\n      streamfield = rep.getStepAttributeString( id_step, \"streamfield\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"PGPEncryptStreamMeta.Exception.UnexpectedErrorReadingStepInfo\" ), e );\n    }\n  }","sourceCodeStart":212,"sourceCodeEnd":248,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStreamMeta.java#L212-L248","documentation":"KettleXMLException thrown by PGPEncryptStreamMeta.readData when parsing the step's XML node fails. The method reads attributes (keyname, keynameInField, keynameFieldName, streamfield, resultfieldname) via XMLHandler; any exception while reading these tags is wrapped with this message. It indicates the transformation XML is malformed or missing expected elements for the PGP Encrypt Stream step.","triggerScenarios":"loadXML calls readData with a step node whose XML is corrupt, hand-edited, produced by an incompatible Pentaho version, or missing tags that XMLHandler.getTagValue cannot process; XMLHandler itself throws a parse exception.","commonSituations":"Opening a ktr file edited manually or by another tool; importing transformations exported from a different PDI version; XML file truncated or with encoding issues.","solutions":["Open the .ktr in a text editor and validate the XML well-formedness and the <step> node for the PGP Encrypt Stream step.","Re-create the step in Spoon and re-save the transformation to regenerate correct XML.","Check that the file was exported from a compatible Pentaho Data Integration version; re-export if not."],"exampleFix":"// before: hand-edited XML with missing/corrupt step node\n<step><name>PGP</name><type>PGPEncryptStream</type>\n// after: re-save from Spoon so loadXML sees a complete node\n<step><name>PGP</name><type>PGPEncryptStream</type><keyname/><keynameInField>N</keynameInField><streamfield/><resultfieldname/>...</step>","handlingStrategy":"try-catch","validationCode":"// Validate XML before loadXML\nDocument doc = XMLHandler.loadXMLFile(new File(ktrPath)); // throws on malformed\nNode step = XMLHandler.getSubNode(XMLHandler.getSubNode(doc, \"transformation\"), \"step\");\nif (step == null || XMLHandler.getTagValue(step, \"type\") == null) throw new IllegalStateException(\"invalid step XML\");","typeGuard":null,"tryCatchPattern":"try { meta.loadXML(stepNode, databases, metaStore); } catch (KettleXMLException e) { log.error(\"Corrupt PGP step XML: \" + e.getCause(), e); throw e; }","preventionTips":["Never hand-edit .ktr files; always edit in Spoon","Keep exporting/importing within the same PDI version","Keep transformation files under version control to detect corruption"],"tags":["kettle","xml-parsing","transformation-metadata"],"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"}