簡體   English   中英

Kinesis Stream PutRecord失敗:無法對JSON的請求進行編組

[英]Kinesis Stream PutRecord Failing : Unable to marshall request to JSON

我正在將事務寫入Kinesis Stream(使用AWS SDK,JAVA),但putRecord因“編組錯誤”而失敗。 我試圖發送一個簡單的字符串(而不是我的復雜對象),但仍然得到相同的錯誤。 下面是stacktrace片段。

AWS開發工具包版本:1.11.76

com.amazonaws.SdkClientException: Unable to marshall request to JSON: com.fasterxml.jackson.dataformat.cbor.CBORGenerator.getOutputContext()Lcom/fasterxml/jackson/core/json/JsonWriteContext;
at com.amazonaws.services.kinesis.model.transform.PutRecordRequestMarshaller.marshall(PutRecordRequestMarshaller.java:85)
at com.amazonaws.services.kinesis.AmazonKinesisClient.putRecord(AmazonKinesisClient.java:1365)

通過從我的包中刪除Jackson Dependency解決。 原因:我對Jackson的依賴導入與AWS SDK對Jackson的依賴性之間存在沖突。 Kinesis Client使用Jackson進行編組。 我使用的是傑克遜的最新版本,這導致了依賴性沖突。

這里的另一個解決方案是確保您所包含的Jackson版本和默認情況下包含在Kinesis中的一個版本不存在沖突。

對Jackson進行了重大更改,如果您手動包含較新版本,但您使用的AWS SDK版本使用的舊版本具有重大更改,那么您將在運行項目時產生沖突。 或相反亦然。

因此,解決方案是升級您的AWS開發工具包或降級您的傑克遜客戶端。 我將使用libs.gradle摘錄提供適用於我的每個API的版本:

ext.versions = [
    spring: '4.3.5.RELEASE',
    awsServerlessJavaContainer: '0.4',
    jackson: '2.8.6'

]

ext.libs = [
    dynamoDbLocal: 'com.amazonaws:DynamoDBLocal:1.11.0.1',
    aws:    [
        dynamodb: 'com.amazonaws:aws-java-sdk-dynamodb:1.11.100',
        lambda: 'com.amazonaws:aws-lambda-java-core:1.1.0',
        lambdaEvents: 'com.amazonaws:aws-lambda-java-events:1.3.0',
        kinesis: 'com.amazonaws:amazon-kinesis-client:1.7.3',
        sns: 'com.amazonaws:aws-java-sdk-sns:1.11.115',
    ],
    awsServerlessJavaContainer: [
            spring: "com.amazonaws.serverless:aws-serverless-java-container-spring:${versions.awsServerlessJavaContainer}"
    ],
    guava   : 'com.google.guava:guava:18.0',
    jackson: [
            databind: "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}",
            cbor: "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${versions.jackson}"
    ],

]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM