我们在AppEngine API中使用了一些URL安全的数据存储区密钥,例如agx0cmFkZW9zLXRlc3RyHQsSEHVzZXIvTGVnYWxFbnRpdHkYgICAgIDu1AkM
使用com.google.appengine.api.datastore.KeyFactory.stringToKey(key)
但是,在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
答案 0 :(得分:0)
如果没有对@snakecharmerb发现的错误报告进行修复,你能不能对字符串进行base64解码,并通过Key.newBuilder
method梳理出构建密钥所需的部分?
当然不理想,但能解决你的问题。