{"record":{"id":"a629ff32833f3eb3","repo":"pentaho/pentaho-kettle","slug":"restmeta-exception-unabletoreadstepinfo","errorCode":"RestMeta.Exception.UnableToReadStepInfo","errorMessage":"RestMeta.Exception.UnableToReadStepInfo","messagePattern":"RestMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/RestMeta.java","lineNumber":620,"sourceCode":"        headerName[i] = XMLHandler.getTagValue( anode, TAG_NAME );\n      }\n      for ( int i = 0; i < nrParameters; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( paramNode, TAG_PARAMETER, i );\n        parameterField[i] = XMLHandler.getTagValue( anode, TAG_FIELD );\n        parameterName[i] = XMLHandler.getTagValue( anode, TAG_NAME );\n      }\n      for ( int i = 0; i < nrMatrixParameters; i++ ) {\n        Node anode = XMLHandler.getSubNodeByNr( matrixParametersNode, TAG_MATRIX_PARAMETER, i );\n        matrixParameterField[i] = XMLHandler.getTagValue( anode, TAG_FIELD );\n        matrixParameterName[i] = XMLHandler.getTagValue( anode, TAG_NAME );\n      }\n\n      fieldName = XMLHandler.getTagValue( stepnode, TAG_RESULT, TAG_NAME ); // Optional, can be null\n      resultCodeFieldName = XMLHandler.getTagValue( stepnode, TAG_RESULT, TAG_CODE ); // Optional, can be null\n      responseTimeFieldName = XMLHandler.getTagValue( stepnode, TAG_RESULT, TAG_RESPONSE_TIME ); // Optional, can be null\n      responseHeaderFieldName = XMLHandler.getTagValue( stepnode, TAG_RESULT, TAG_RESPONSE_HEADER ); // Optional, can be null\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"RestMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId idStep, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      applicationType = rep.getStepAttributeString( idStep, TAG_APPLICATION_TYPE );\n      method = rep.getStepAttributeString( idStep, TAG_METHOD );\n      url = rep.getStepAttributeString( idStep, TAG_URL );\n      urlInField = rep.getStepAttributeBoolean( idStep, TAG_URL_IN_FIELD );\n\n      methodFieldName = rep.getStepAttributeString( idStep, TAG_METHOD_FIELD_NAME );\n      dynamicMethod = rep.getStepAttributeBoolean( idStep, TAG_DYNAMIC_METHOD );\n      urlField = rep.getStepAttributeString( idStep, TAG_URL_FIELD );\n      bodyField = rep.getStepAttributeString( idStep, TAG_BODY_FIELD );\n      httpLogin = rep.getStepAttributeString( idStep, TAG_HTTP_LOGIN );\n      httpPassword =\n        Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( idStep, TAG_HTTP_PASSWORD ) );","sourceCodeStart":602,"sourceCodeEnd":638,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/RestMeta.java#L602-L638","documentation":"RestMeta.loadXML wraps any exception raised while parsing the step's XML definition into a KettleXMLException with this message. It means the REST step's serialized configuration (in a .ktr file) could not be read into step metadata.","triggerScenarios":"Malformed or unexpected XML in the <step> node (missing tags, wrong structure), or an exception in XMLHandler while loading a transformation containing a REST step.","commonSituations":"Hand-edited .ktr file corrupted; transformation written by a newer Pentaho version with extra/changed XML tags; truncated file from bad version control merge.","solutions":["Validate/repair the .ktr XML (open in a text editor, check the REST step node is well-formed)","Re-create the REST step in Spoon and re-save the transformation","Open the transformation in the same or newer Pentaho version that wrote it","Restore the .ktr from version control history"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Validate the .ktr XML before loading:\nDocumentBuilderFactory.newInstance().newDocumentBuilder()\n  .parse(new File(\"trans.ktr\")); // throws if malformed","typeGuard":null,"tryCatchPattern":"try {\n  transMeta = new TransMeta(\"trans.ktr\", rep);\n} catch (KettleXMLException e) {\n  logError(\"Failed to load REST step XML: \" + e.getCause());\n}","preventionTips":["Do not hand-edit .ktr files","Keep Pentaho client version aligned with files being loaded","Store transformations in version control with merge validation"],"tags":["kettle","xml","step-metadata","rest-meta"],"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"}