appsmithorg/appsmith · error · AppsmithPluginException

PE-GSH-5000

PE-GSH-5000

Error message

Missing a valid response object.

What it means

PE-GSH-5000 (QUERY_EXECUTION_FAILED). transformExecutionResponse guards against a null response from the Google Sheets API. A null response means the upstream HTTP call produced no body at all (transport-level failure, interceptor returning null, or a framework bug).

Source

Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsBulkUpdateMethod.java:247

        final List<RowObject> body1 = (List<RowObject>) methodConfig.getBody();
        List<List<Object>> collect = body1.stream()
                .map(row ->
                        row.getAsSheetValues(body1.get(0).getValueMap().keySet().toArray(new String[0])))
                .collect(Collectors.toList());

        return webClient
                .method(HttpMethod.PUT)
                .uri(uriBuilder.build(true).toUri())
                .body(BodyInserters.fromValue(Map.of(
                        "range", methodConfig.getSpreadsheetRange(), "majorDimension", "ROWS", "values", collect)));
    }

    @Override
    public JsonNode transformExecutionResponse(
            JsonNode response, MethodConfig methodConfig, Set<String> userAuthorizedSheetIds) {
        if (response == null) {
            throw new AppsmithPluginException(
                    GSheetsPluginError.QUERY_EXECUTION_FAILED, ErrorMessages.MISSING_VALID_RESPONSE_ERROR_MSG);
        }

        return this.objectMapper.valueToTree(Map.of("message", "Updated sheet successfully!"));
    }

    private Map<Integer, RowObject> getRowObjectMapFromBody(JsonNode body) {

        if (!body.isArray()) {
            throw new AppsmithPluginException(
                    AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,
                    ErrorMessages.EXPECTED_ARRAY_OF_ROW_OBJECT_MESSAGE);
        }

        if (body.isEmpty()) {
            throw new AppsmithPluginException(
                    AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.EMPTY_UPDATE_ROW_OBJECTS_MESSAGE);
        }

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. Retry the action - most null-response cases are transient.
  2. Confirm the Google Sheets datasource OAuth2 token is still valid (re-authorize if needed).
  3. Check network/proxy logs for a response with an empty body or a non-2xx status that was swallowed.
  4. If it persists, file an issue against the plugin - a null success response indicates a framework-level defect.
Defensive patterns

Strategy: retry

Try / catch

try {
    result = method.transformExecutionResponse(response, config, ids);
} catch (AppsmithPluginException e) {
    if ("PE-GSH-5000".equals(e.getAppsmithError().getCode()) && response == null) {
        // retry with backoff or re-authorize datasource
    }
}

Prevention

When it happens

Trigger: The PUT to the Sheets values.update endpoint returned a null body, e.g. because of a network blip, an auth gateway that swallowed the response, or a misconfigured WebClient filter returning Mono.empty().

Common situations: Transient network/proxy issue; OAuth token expired mid-flight and the gateway returned an empty body; running in an environment with an HTTP interceptor that drops 2xx bodies.

Related errors


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/3b5c3f5ea97087c4. Report an issue: GitHub.