appsmithorg/appsmith · error · AppsmithPluginException
PE-GSH-5000
PE-GSH-5000
Error message
Missing a valid response object.
What it means
Thrown by RowsAppendMethod.transformExecutionResponse when the response argument is null after the Sheets API append call. Code PE-GSH-5000 maps to GSheetsPluginError.QUERY_EXECUTION_FAILED (HTTP 500, '{0}', category 'Query execution error', INTERNAL_ERROR). This is a server-side runtime condition, not a configuration error.
Source
Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsAppendMethod.java:250
.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 row successfully!"));
}
private RowObject getRowObjectFromBody(JsonNode body) {
if (body.isArray()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.EXPECTED_ROW_OBJECT_MESSAGE);
}
if (body.isEmpty()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.EMPTY_ROW_OBJECT_MESSAGE);
}
View on GitHub (pinned to 8cd9021c24)
Solutions
- Retry the query once — transient network/empty-response issues often clear.
- Check Appsmith server logs for the underlying WebClient/Reactor error around the same timestamp.
- Verify OAuth2 token validity and that the spreadsheet is reachable; re-authorize the datasource if expired.
- If reproducible, report to Appsmith support with the query JSON and server logs.
Defensive patterns
Strategy: try-catch
Try / catch
// Wrap the query trigger and surface null-response failures clearly
try {
pluginCommand.trigger();
} catch (AppsmithPluginException e) {
if ("PE-GSH-5000".equals(e.getAppErrorCode())) {
showToast("Sheets returned no response. Retry or re-authorize the datasource.");
} else { throw e; }
} Prevention
- Keep the Google Sheets OAuth token valid; re-authorize on expiry.
- Monitor server logs for WebClient/Reactor errors.
- Retry transient null-response failures once before escalating.
When it happens
Trigger: The reactive pipeline delivers a null response to transformExecutionResponse — typically because the upstream exchange produced no body/entity or an intermediate operator returned null. The response == null guard fires MISSING_VALID_RESPONSE_ERROR_MSG.
Common situations: Network interruption mid-stream, a WebClient timeout that yielded a null entity, a Sheets API 204/empty body, or a plugin regression. Rare under normal operation.
Related errors
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/18b07665c21c021d.
Report an issue: GitHub.