如何使用camel-ddb来保存json有效负载

时间:2015-02-10 17:22:57

标签: apache-camel amazon-dynamodb

我在dynamodb(EU-WEST-1)中创建并创建了一个表格,并创建了一个将json有效负载放入表中的驼峰路径。

我的路线如下:

String dynamoDbEndpoint = String.format("aws-ddb://tablename?accessKey=%s&secretKey=RAW(%s)&tableName=tablename&amazonDdbEndpoint=dynamodb.eu-west-1.amazonaws.com",awsAccessKey,awsSecretKey);
from("direct:ipg-queue").to(dynamoDbEndpoint)

我收到错误消息:

  

com.amazonaws.AmazonServiceException:检测到1个验证错误:'item'处的值null无法满足约束:成员不能为null(服务:AmazonDynamoDB;状态代码:400;错误代码:ValidationException;请求ID:0AVSR54LRTOG3U0TTC5B1QO4KBVV4KQNSO5AEMVJF66Q9ASUAAJG)

示例有效负载是:

{"accountNumber":"123456789","customerName":"John Smith","id":"8422b9e0-739b-4d19-9291-037b68344068"}

表示为字符串。

我正在做一些愚蠢的事,但无法弄清楚......

1 个答案:

答案 0 :(得分:0)

事实证明我是愚蠢的。您只需要在交换中设置CamelAwdDbItem标头。我在dynamo db端点之前添加了以下进程块到我的路由,然后我去了...

.unmarshal()
.json(JsonLibrary.Gson, Map.class)
.process((Exchange exchange) -> {
    Map body = (Map) exchange.getIn()
                             .getBody();

    Map<String, AttributeValue> newBody = new HashMap();

    for(Object key : body.keySet()) {
        newBody.put(key.toString(), new AttributeValue(body.get(key).toString()));
    }

    exchange.getIn().setHeader("CamelAwsDdbItem", newBody);
})

我还将&operation=PutItem放在端点定义的末尾。