aws / aws/aws-lambda-java-libs
Custom client context parser error
- 主要語言
- Java
- 星號
- 548
- 分支
- 241
- 平均合併
- 2 天 5 分鐘
- 30 天內合併 PR
- 11
描述
We've recently discovered a bug in aws-lambda-java-core (1.2.0) where custom client context will throw a parser error.
[Relevant AWS documentation](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax):
> Up to 3583 bytes of base64-encoded data about the invoking client to pass to the function in the context object.
Relevant implementation:
https://github.com/aws/aws-lambda-java-libs/blob/593e60301192f7f908daf215f63df96aa1668350/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/api/LambdaClientContext.java#L13
This implementation specifies that `custom` is a map of key-value pairs, for example:
```json
{
"custom": {
"foo": "bar"
}
}
```
If you try to pass anything else, you'll see a parser error:
```json
{
"custom": {
"foo": {}
}
}
```
```json
{
"errorMessage": "java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 20 path $.custom.",
"errorType": "com.google.gson.JsonSyntaxException",
"stackTrace": [
"com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)",
"com.google.gson.TypeAdapter$1.read(TypeAdapter.java:199)"
],
"cause": {
"errorMessage": "Expected a string but was BEGIN_OBJECT at line 1 column 20 path $.custom.",
"errorType": "java.lang.IllegalStateException",
"stackTrace": [
"com.google.gson.stream.JsonReader.nextString(JsonReader.java:837)",
"com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:358)",
"com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:346)",
"com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)",
"com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)",
"com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)",
"com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)",
"com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)",
"com.google.gson.TypeAdapter$1.read(TypeAdapter.java:199)"
]
}
}
```
If you have any lambdas that use this library, you can trigger the error with:
```sh
aws lambda invoke \
--function-name some-function \
--client-context $(echo '{"custom": {"foo":{}}}' | base64) \
/dev/stdout
```
Is there any documentation that explains this constraint, or is this a bug? Thanks for your work on this project!
貢獻指南
研究方向
從連結的實作中的 LambdaClientContext.java 開始,並使用提供的 aws lambda invoke 命令重現失敗。將 parser 接受的自訂值形狀與連結的 AWS Invoke 文件進行比較,接著判斷此問題需要修正行為,還是需要更清楚的文件。當預期的限制已建立,並且已針對回報的 payload 完成驗證時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- aws, java
- 領域
- api, backend
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 38/100