{"record":{"id":"84abd0f2d4fdfdc8","repo":"appsmithorg/appsmith","slug":"pe-dyn-5001","errorCode":"PE-DYN-5001","errorMessage":"Unknown action: `%s`. Note that action names are case-sensitive.","messagePattern":"Unknown action: `(.+?)`\\. Note that action names are case-sensitive\\.","errorType":"exception","errorClass":"AppsmithPluginException","httpStatus":500,"severity":"error","filePath":"app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java","lineNumber":229,"sourceCode":"                        Map<String, Object> parameters = null;\n                        try {\n                            if (StringUtils.hasLength(body)) {\n                                parameters = objectMapper.readValue(body, HashMap.class);\n                            }\n                        } catch (IOException e) {\n                            final String message = \"Error parsing the JSON body: \" + e.getMessage();\n                            log.warn(message, e);\n                            throw new AppsmithPluginException(\n                                    AppsmithPluginError.PLUGIN_JSON_PARSE_ERROR, body, e.getMessage());\n                        }\n                        requestData.put(\"parameters\", parameters);\n\n                        final Class<?> requestClass;\n                        try {\n                            requestClass = Class.forName(\n                                    \"software.amazon.awssdk.services.dynamodb.model.\" + action + \"Request\");\n                        } catch (ClassNotFoundException e) {\n                            throw new AppsmithPluginException(\n                                    DynamoPluginError.UNKNOWN_ACTION_NAME,\n                                    String.format(DynamoErrorMessages.UNKNOWN_ACTION_NAME_ERROR_MSG, action),\n                                    e.getMessage());\n                        }\n\n                        try {\n                            final Method actionExecuteMethod = DynamoDbClient.class.getMethod(\n                                    // Convert `ListTables` to `listTables`, which is the name of the method to execute\n                                    // this action.\n                                    toLowerCamelCase(action), requestClass);\n                            final Object sdkValue = plainToSdk(parameters, requestClass);\n                            final DynamoDbResponse response =\n                                    (DynamoDbResponse) actionExecuteMethod.invoke(ddb, sdkValue);\n                            Object rawResponse = sdkToPlain(response);\n                            Object transformedResponse =\n                                    getTransformedResponse((Map<String, Object>) rawResponse, action);\n                            result.setBody(transformedResponse);\n                        } catch (InvocationTargetException","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/appsmithorg/appsmith/blob/8cd9021c24cdbea1c3c12c966073708e83db60c2/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java#L211-L247","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nactionConfiguration.setPath(\"listtables\");\n\n// after\nactionConfiguration.setPath(\"ListTables\");","handlingStrategy":"validation","validationCode":"private static final Set<String> KNOWN_ACTIONS = Set.of(\n    \"ListTables\", \"DescribeTable\", \"GetItem\", \"PutItem\",\n    \"UpdateItem\", \"DeleteItem\", \"Query\", \"Scan\",\n    \"BatchGetItem\", \"BatchWriteItem\",\n    \"TransactGetItems\", \"TransactWriteItems\");\n\nif (!KNOWN_ACTIONS.contains(action)) {\n    throw new IllegalArgumentException(\n        \"Unknown DynamoDB action: \" + action\n        + \". Names are case-sensitive. Known: \" + KNOWN_ACTIONS);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["dynamodb","action-name","case-sensitive","class-loading","pe-dyn-5001"],"backgroundTag":null,"analyzedSha":"8cd9021c24cdbea1c3c12c966073708e83db60c2","analyzedAt":"2026-08-12T22:14:19.293Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}