appsmithorg/appsmith · error · AppsmithPluginException

PE-GSH-5000

PE-GSH-5000

Error message

Missing a valid response object.

What it means

Thrown by RowsBulkAppendMethod.transformExecutionResponse when the response argument is null after the Sheets API bulk append call. Code PE-GSH-5000 (GSheetsPluginError.QUERY_EXECUTION_FAILED, HTTP 500, INTERNAL_ERROR). A server-side runtime failure in the response-handling stage, not a user configuration issue.

Source

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

                .map(row ->
                        row.getAsSheetValues(body1.get(0).getValueMap().keySet().toArray(new String[0])))
                .collect(Collectors.toList());

        final ValueRange valueRange = new ValueRange();
        valueRange.setMajorDimension("ROWS");
        valueRange.setRange(range);
        valueRange.setValues(collect);
        return webClient
                .method(HttpMethod.POST)
                .uri(uriBuilder.build(true).toUri())
                .body(BodyInserters.fromValue(valueRange));
    }

    @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", "Inserted rows successfully!"));
    }

    private List<RowObject> getRowObjectListFromBody(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_ROW_ARRAY_OBJECT_MESSAGE);
        }

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. Retry the query once; transient empty-response issues often resolve.
  2. Re-authorize the Google Sheets datasource if the OAuth token expired.
  3. Inspect Appsmith server logs for the reactor/WebClient error at the same time.
  4. If reproducible, report to Appsmith support with query JSON and logs.
Defensive patterns

Strategy: try-catch

Try / catch

// Catch null-response failures from the Sheets bulk append
try {
    bulkAppendCommand.trigger();
} catch (AppsmithPluginException e) {
    if ("PE-GSH-5000".equals(e.getAppErrorCode())) {
        showToast("Sheets returned no response. Retry or re-authorize.");
    } else { throw e; }
}

Prevention

When it happens

Trigger: The reactive pipeline passes a null response into transformExecutionResponse — empty/missing entity from the WebClient exchange, a mid-stream network drop, or a pipeline operator returning null. The response == null guard fires.

Common situations: Transient connectivity, OAuth token expiry manifesting as an empty body, or a plugin/reactor regression. Uncommon in normal use.

Related errors


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