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
- Retry the action - most null-response cases are transient.
- Confirm the Google Sheets datasource OAuth2 token is still valid (re-authorize if needed).
- Check network/proxy logs for a response with an empty body or a non-2xx status that was swallowed.
- 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
- Treat null-response errors as transient - retry first.
- Keep the Google Sheets OAuth2 token fresh.
- Monitor network/proxy for empty-body responses.
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.