{"record":{"id":"ffea550ab9086948","repo":"pentaho/pentaho-kettle","slug":"httpmeta-exception-unabletoreadstepinfo","errorCode":"HTTPMeta.Exception.UnableToReadStepInfo","errorMessage":"HTTPMeta.Exception.UnableToReadStepInfo","messagePattern":"HTTPMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/http/HTTPMeta.java","lineNumber":438,"sourceCode":"      for ( int i = 0; i < nrargs; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( lookup, \"arg\", i );\n\n        argumentField[i] = XMLHandler.getTagValue( anode, \"name\" );\n        argumentParameter[i] = XMLHandler.getTagValue( anode, \"parameter\" );\n      }\n\n      for ( int i = 0; i < nrheaders; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( lookup, \"header\", i );\n        headerField[i] = XMLHandler.getTagValue( anode, \"name\" );\n        headerParameter[i] = XMLHandler.getTagValue( anode, \"parameter\" );\n      }\n\n      fieldName = XMLHandler.getTagValue( stepnode, \"result\", \"name\" );\n      resultCodeFieldName = XMLHandler.getTagValue( stepnode, \"result\", \"code\" );\n      responseTimeFieldName = XMLHandler.getTagValue( stepnode, \"result\", \"response_time\" );\n      responseHeaderFieldName = XMLHandler.getTagValue( stepnode, \"result\", \"response_header\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"HTTPMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      url = rep.getStepAttributeString( id_step, \"url\" );\n      urlInField = rep.getStepAttributeBoolean( id_step, \"urlInField\" );\n      urlField = rep.getStepAttributeString( id_step, \"urlField\" );\n      encoding = rep.getStepAttributeString( id_step, \"encoding\" );\n      httpLogin = rep.getStepAttributeString( id_step, \"httpLogin\" );\n      httpPassword =\n        Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( id_step, \"httpPassword\" ) );\n      proxyHost = rep.getStepAttributeString( id_step, \"proxyHost\" );\n      proxyPort = rep.getStepAttributeString( id_step, \"proxyPort\" );\n      socketTimeout = rep.getStepAttributeString( id_step, \"socketTimeout\" );\n      connectionTimeout = rep.getStepAttributeString( id_step, \"connectionTimeout\" );\n      closeIdleConnectionsTime = rep.getStepAttributeString( id_step, \"closeIdleConnectionsTime\" );\n","sourceCodeStart":420,"sourceCodeEnd":456,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/http/HTTPMeta.java#L420-L456","documentation":"HTTPMeta.loadXML fails to deserialize the step's configuration from the transformation XML. Any exception while reading tags via XMLHandler (in readData) is wrapped in a KettleXMLException 'HTTPMeta.Exception.UnableToReadStepInfo'.","triggerScenarios":"loadXML -> readData throws while calling XMLHandler.getTagValue on the <result>/<url>/<header> sections of the step node — corrupted or unexpected XML structure, wrong node passed, or malformed repository export file.","commonSituations":"Hand-edited or truncated .ktr file; transformation produced by a newer Pentaho version with schema changes; copy-pasted XML step node missing expected child tags.","solutions":["Open the .ktr file and inspect the <step> XML for the HTTP step; fix malformed/missing tags (especially <result> section).","Recreate the step in Spoon and re-save the transformation.","Check Pentaho version compatibility of the transformation file.","Validate the XML is well-formed (xmllint) before opening."],"exampleFix":"// before\n<result><name/>\n  <!-- code and response_time tags missing/corrupted -->\n// after\n<result>\n  <name>result</name>\n  <code>resultCode</code>\n  <response_time>responseTime</response_time>\n  <response_header>responseHeader</response_header>\n</result>","handlingStrategy":"try-catch","validationCode":"// validate the .ktr XML is well-formed and contains the expected step tags before loading\nDocument doc = XMLHandler.loadXMLFile( ktrFile );\nif ( XMLHandler.getTagValue( doc, \"transformation\" ) == null ) throw new IllegalArgumentException( \"not a transformation file\" );","typeGuard":null,"tryCatchPattern":"try { transMeta.loadXML( file, ... ); } catch ( KettleXMLException e ) {\n  logError( \"Cannot read HTTP step info: \" + e.getMessage(), e );\n  // fall back to recreating the step or loading a backup .ktr\n}","preventionTips":["Never hand-edit .ktr XML without validating afterwards (xmllint)","Keep transformation files under version control so a good copy is always available","Match Pentaho versions when importing transformations from other environments"],"tags":["xml","kettle","deserialization"],"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"}