appsmithorg/appsmith · error · AppsmithPluginException

PE-DYN-5001

PE-DYN-5001

Error message

Unknown action: `%s`. Note that action names are case-sensitive.

What it means

The plugin uses Class.forName("software.amazon.awssdk.services.dynamodb.model." + action + "Request") to locate the AWS SDK v2 request class matching the action name. If the class is not found (ClassNotFoundException), it throws DynamoPluginError.UNKNOWN_ACTION_NAME (PE-DYN-5001). Action names are case-sensitive: 'ListTables' maps to ListTablesRequest, but 'listtables' does not.

Source

Thrown at app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java:229

                        Map<String, Object> parameters = null;
                        try {
                            if (StringUtils.hasLength(body)) {
                                parameters = objectMapper.readValue(body, HashMap.class);
                            }
                        } catch (IOException e) {
                            final String message = "Error parsing the JSON body: " + e.getMessage();
                            log.warn(message, e);
                            throw new AppsmithPluginException(
                                    AppsmithPluginError.PLUGIN_JSON_PARSE_ERROR, body, e.getMessage());
                        }
                        requestData.put("parameters", parameters);

                        final Class<?> requestClass;
                        try {
                            requestClass = Class.forName(
                                    "software.amazon.awssdk.services.dynamodb.model." + action + "Request");
                        } catch (ClassNotFoundException e) {
                            throw new AppsmithPluginException(
                                    DynamoPluginError.UNKNOWN_ACTION_NAME,
                                    String.format(DynamoErrorMessages.UNKNOWN_ACTION_NAME_ERROR_MSG, action),
                                    e.getMessage());
                        }

                        try {
                            final Method actionExecuteMethod = DynamoDbClient.class.getMethod(
                                    // Convert `ListTables` to `listTables`, which is the name of the method to execute
                                    // this action.
                                    toLowerCamelCase(action), requestClass);
                            final Object sdkValue = plainToSdk(parameters, requestClass);
                            final DynamoDbResponse response =
                                    (DynamoDbResponse) actionExecuteMethod.invoke(ddb, sdkValue);
                            Object rawResponse = sdkToPlain(response);
                            Object transformedResponse =
                                    getTransformedResponse((Map<String, Object>) rawResponse, action);
                            result.setBody(transformedResponse);
                        } catch (InvocationTargetException

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. Use the exact PascalCase DynamoDB SDK action name: ListTables, GetItem, PutItem, UpdateItem, DeleteItem, Query, Scan, BatchGetItem, BatchWriteItem, TransactGetItems, TransactWriteItems.
  2. Check the casing — the plugin concatenates the action directly into a class name, so case matters.
  3. Verify the AWS SDK v2 version bundled with the plugin includes the requested action class.

Example fix

// before
actionConfiguration.setPath("listtables");

// after
actionConfiguration.setPath("ListTables");
Defensive patterns

Strategy: validation

Validate before calling

private static final Set<String> KNOWN_ACTIONS = Set.of(
    "ListTables", "DescribeTable", "GetItem", "PutItem",
    "UpdateItem", "DeleteItem", "Query", "Scan",
    "BatchGetItem", "BatchWriteItem",
    "TransactGetItems", "TransactWriteItems");

if (!KNOWN_ACTIONS.contains(action)) {
    throw new IllegalArgumentException(
        "Unknown DynamoDB action: " + action
        + ". Names are case-sensitive. Known: " + KNOWN_ACTIONS);
}

Prevention

When it happens

Trigger: The action path holds a value that does not correspond to a real DynamoDB SDK request class — a typo, wrong casing, an unsupported operation, or a value from an incompatible SDK version.

Common situations: Typing 'listtables' instead of 'ListTables'; using an action name from a different AWS SDK generation (v1 vs v2); referencing a DynamoDB Streams or Document API operation not in the dynamodb model package; a binding that resolved to a lowercased value.

Related errors


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