{"record":{"id":"9305557dc05eae8b","repo":"appsmithorg/appsmith","slug":"pe-gsh-5000-930555","errorCode":"PE-GSH-5000","errorMessage":"Missing a valid response object.","messagePattern":"Missing a valid response object\\.","errorType":"exception","errorClass":"AppsmithPluginException","httpStatus":500,"severity":"error","filePath":"app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsUpdateMethod.java","lineNumber":241,"sourceCode":"        uriBuilder.queryParam(\"valueInputOption\", \"USER_ENTERED\");\n        uriBuilder.queryParam(\"includeValuesInResponse\", Boolean.TRUE);\n\n        final List<String> objects = new ArrayList<>(rowObject.getValueMap().values());\n\n        return webClient\n                .method(HttpMethod.PUT)\n                .uri(uriBuilder.build(true).toUri())\n                .body(BodyInserters.fromValue(Map.of(\n                        \"range\", methodConfig.getSpreadsheetRange(),\n                        \"majorDimension\", \"ROWS\",\n                        \"values\", List.of(objects))));\n    }\n\n    @Override\n    public JsonNode transformExecutionResponse(\n            JsonNode response, MethodConfig methodConfig, Set<String> userAuthorizedSheetIds) {\n        if (response == null) {\n            throw new AppsmithPluginException(\n                    GSheetsPluginError.QUERY_EXECUTION_FAILED, ErrorMessages.MISSING_VALID_RESPONSE_ERROR_MSG);\n        }\n\n        return this.objectMapper.valueToTree(Map.of(\"message\", \"Updated sheet successfully!\"));\n    }\n\n    private RowObject getRowObjectFromBody(JsonNode body) {\n\n        if (body.isArray()) {\n            throw new AppsmithPluginException(\n                    AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.EXPECTED_ROW_OBJECT_MESSAGE);\n        }\n\n        if (body.isEmpty()) {\n            throw new AppsmithPluginException(\n                    AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.EMPTY_UPDATE_ROW_OBJECT_MESSAGE);\n        }\n","sourceCodeStart":223,"sourceCodeEnd":259,"githubUrl":"https://github.com/appsmithorg/appsmith/blob/8cd9021c24cdbea1c3c12c966073708e83db60c2/app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsUpdateMethod.java#L223-L259","documentation":"Thrown in RowsUpdateMethod.transformExecutionResponse when the response JsonNode is null. Code GSheetsPluginError.QUERY_EXECUTION_FAILED (PE-GSH-5000). Same root cause class as error 265 but on the Update path: the upstream PUT to sheets.googleapis.com returned an empty body or the reactive chain delivered Mono.empty() to the transformer. Message: MISSING_VALID_RESPONSE_ERROR_MSG.","triggerScenarios":"Update succeeded at Google's side but the response body was lost in transit; an OAuth token expired mid-flight so the gateway returned empty; a self-hosted proxy stripped the body.","commonSituations":"Token refresh race; reverse proxy buffering issues; intermittent upstream 5xx where the plugin's error mapping returned empty instead of the error.","solutions":["Check server logs for the underlying HTTP status of the PUT /values/{range} call.","Re-authorize the datasource (OAuth refresh).","Inspect proxy config for body stripping on non-2xx.","Confirm the row was actually written by re-reading the sheet - the update may have succeeded but the response was lost.","Report to Appsmith: update path should treat null response as a structured execution failure with the upstream status, not just 'missing response'."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"UpdateRow.run({\n  onSuccess: (response) => {\n    if (!response) {\n      showAlert('Update returned no response; verify the row actually updated by re-reading the sheet', 'warning');\n      return;\n    }\n    showAlert('Updated successfully', 'success');\n  },\n  onError: (err) => showAlert(err.message, 'error'),\n});","preventionTips":["Re-authorize the datasource if OAuth tokens expire frequently.","After an opaque null-response, re-List the rows to confirm whether the update landed.","Watch server logs for the upstream PUT status.","Verify the proxy is not stripping response bodies."],"tags":["appsmith","google-sheets","response-handling","null-response","query-execution","row-update"],"backgroundTag":null,"analyzedSha":"8cd9021c24cdbea1c3c12c966073708e83db60c2","analyzedAt":"2026-08-12T22:14:19.293Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}