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 (InvocationTargetExceptionView on GitHub (pinned to 8cd9021c24)
Solutions
- Use the exact PascalCase DynamoDB SDK action name: ListTables, GetItem, PutItem, UpdateItem, DeleteItem, Query, Scan, BatchGetItem, BatchWriteItem, TransactGetItems, TransactWriteItems.
- Check the casing — the plugin concatenates the action directly into a class name, so case matters.
- 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
- Use exact PascalCase DynamoDB SDK action names (ListTables, GetItem, etc.).
- Verify the action class exists in the bundled AWS SDK v2 version.
- Avoid passing lowercased or misspelled action names.
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.