{"record":{"id":"059e2cca03e2b636","repo":"pentaho/pentaho-kettle","slug":"httppostmeta-exception-unabletosavestepinfo","errorCode":null,"errorMessage":"HTTPPOSTMeta.Exception.UnableToSaveStepInfo","messagePattern":"HTTPPOSTMeta\\.Exception\\.UnableToSaveStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/httppost/HTTPPOSTMeta.java","lineNumber":574,"sourceCode":"      rep.saveStepAttribute( id_transformation, id_step, \"connectionTimeout\", connectionTimeout );\n      rep.saveStepAttribute( id_transformation, id_step, \"closeIdleConnectionsTime\", closeIdleConnectionsTime );\n\n      for ( int i = 0; i < argumentField.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"arg_name\", argumentField[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"arg_parameter\", argumentParameter[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"arg_header\", argumentHeader[i] );\n      }\n      for ( int i = 0; i < queryField.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"query_name\", queryField[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"query_parameter\", queryParameter[i] );\n      }\n\n      rep.saveStepAttribute( id_transformation, id_step, \"result_name\", fieldName );\n      rep.saveStepAttribute( id_transformation, id_step, \"result_code\", resultCodeFieldName );\n      rep.saveStepAttribute( id_transformation, id_step, \"response_time\", responseTimeFieldName );\n      rep.saveStepAttribute( id_transformation, id_step, \"response_header\", responseHeaderFieldName );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"HTTPPOSTMeta.Exception.UnableToSaveStepInfo\" )\n        + id_step, e );\n    }\n  }\n\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,\n    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,\n    Repository repository, IMetaStore metaStore ) {\n    CheckResult cr;\n\n    // See if we have input streams leading to this step!\n    if ( input.length > 0 ) {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"HTTPPOSTMeta.CheckResult.ReceivingInfoFromOtherSteps\" ), stepMeta );\n      remarks.add( cr );\n    } else {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(","sourceCodeStart":556,"sourceCodeEnd":592,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/httppost/HTTPPOSTMeta.java#L556-L592","documentation":"HTTPPOSTMeta.saveRep() wraps any exception raised while persisting the HTTP POST step's attributes (URL, fields, request/response headers, result field names) to the Kettle repository in a KettleException with this message, appending the step id. It signals that the step definition could not be saved, so the transformation will be incomplete when reloaded. The cause is always the wrapped repository exception.","triggerScenarios":"Calling saveRep (directly or via saving a transformation) when the repository connection fails mid-save, a saveStepAttribute call throws (DB constraint, connection loss, read-only repository), or an invalid id_step is passed.","commonSituations":"Network drop to the database repository while saving; repository user lacks write permissions; saving a transformation copied between repositories; stale repository session after timeout.","solutions":["Check the wrapped cause (KettleException.getCause()) for the repository failure — fix connectivity/permissions first","Re-run the save operation after restoring the repository connection","Verify the repository user has write access to the target transformation folder","If using a file repository, check disk space and write permissions on the repository directory"],"exampleFix":"// before\ntransMeta.saveRep(repo, metaStore, transId, true);\n// after\ntry {\n  transMeta.saveRep(repo, metaStore, transId, true);\n} catch (KettleException e) {\n  logError(\"Failed to save HTTP POST step: \" + e.getCause(), e);\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"if (!repo.isConnected()) { repo.connect(user, password); }","typeGuard":"boolean isWritableRepo(Repository repo) { return repo != null && repo.isConnected(); }","tryCatchPattern":"try { transMeta.saveRep(repo, metaStore, transId, true); } catch (KettleException e) { logger.error(\"Unable to save step info: \" + e.getCause(), e); }","preventionTips":["Log getCause() to surface the real repository error","Validate repository connectivity before bulk saves","Check write permissions on the target repository folder"],"tags":["kettle","repository","persistence","http-post"],"backgroundTag":"database-write-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"}