aws / aws/aws-lambda-java-libs

Custom client context parser error

未關閉
#212 0 則留言 5 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
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

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。