我们如何在Google Cloud API中解析并生成App Engine URL-Safe数据存储区密钥?

时间:2017-01-12 06:48:27

标签: google-app-engine google-cloud-datastore

我们在AppEngine API中使用了一些URL安全的数据存储区密钥,例如agx0cmFkZW9zLXRlc3RyHQsSEHVzZXIvTGVnYWxFbnRpdHkYgICAgIDu1AkM

使用com.google.appengine.api.datastore.KeyFactory.stringToKey(key)

在AppEngine API中正确解析这些内容

但是,在Google Cloud API中,com.google.cloud.datastore.Key.fromUrlSafe(key)始终会生成解析错误,如下所示。

Google Cloud API的网址安全字符串格式可能无法更改,但我们需要能够解析并生成旧格式。

App Engine API发行版中提供了此代码。它对一个ProtoBuf Reference 对象进行了序列化。

最终这是一个字符串解析任务,对库没有很深的依赖性,因此应该可以使用简单的代码片段,而不需要任何特定于App Engine API的代码。

我们如何使用Google Cloud API解析并生成此类关键字符串?

java.lang.IllegalArgumentException: Could not parse key
    at com.google.cloud.datastore.Key.fromUrlSafe(Key.java:205)
...
Caused by: com.google.protobuf.TextFormat$ParseException: 1:61: Expected "{".
    at com.google.protobuf.TextFormat$Tokenizer.parseException(TextFormat.java:1064)
    at com.google.protobuf.TextFormat$Tokenizer.consume(TextFormat.java:750)
    at com.google.protobuf.TextFormat$Parser.skipFieldMessage(TextFormat.java:1770)
    at com.google.protobuf.TextFormat$Parser.mergeField(TextFormat.java:1528)
    at com.google.protobuf.TextFormat$Parser.mergeField(TextFormat.java:1439)
    at com.google.protobuf.TextFormat$Parser.merge(TextFormat.java:1423)
    at com.google.protobuf.TextFormat$Parser.merge(TextFormat.java:1342)
    at com.google.protobuf.TextFormat.merge(TextFormat.java:1221)
    at com.google.cloud.datastore.Key.fromUrlSafe(Key.java:200)
    ... 1 more

1 个答案:

答案 0 :(得分:0)

如果没有对@snakecharmerb发现的错误报告进行修复,你能不能对字符串进行base64解码,并通过Key.newBuilder method梳理出构建密钥所需的部分?

当然不理想,但能解决你的问题。