Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 间歇Base64任务转换错误_Google App Engine - Fatal编程技术网

Google app engine 间歇Base64任务转换错误

Google app engine 间歇Base64任务转换错误,google-app-engine,Google App Engine,在使用Gson传递拉队列任务负载内的POJOJava对象时,我遇到了一个非常奇怪的情况。在不更改代码或任务有效负载内设置的POJO的情况下,这将随机成功或失败 这是我正在使用的代码: PullQueueTaskPayLoad tqp = new PullQueueTaskPayLoad("id","name"); tqp.uploadURL = taskPayLoad.uploadURL; tqp.urls = taskPayLoad.urls; tqp.sliceQue

在使用Gson传递拉队列任务负载内的POJOJava对象时,我遇到了一个非常奇怪的情况。在不更改代码或任务有效负载内设置的POJO的情况下,这将随机成功或失败

这是我正在使用的代码:

   PullQueueTaskPayLoad tqp = new PullQueueTaskPayLoad("id","name");
   tqp.uploadURL = taskPayLoad.uploadURL;
   tqp.urls = taskPayLoad.urls;
   tqp.sliceQueryParameter = taskPayLoad.sliceQueryParameter;
   TaskOptions task = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL);
   task.payload(new Gson().toJson(tqp));
   q.add(task);
然后使用外部队列使用者检索POJO,如下所示:

    Type GSON_TYPE = new TypeToken<PullQueueTaskPayLoad>() {}.getType();
    byte[] b = new Base64().decodeBase64(leasedTask.getPayloadBase64().getBytes());
    String payload = new String(b);
    logger.info("About to convert payload: "+payload);
    PullQueueTaskPayLoad taskpayload = new Gson().fromJson(payload, GSON_TYPE);
Type GSON_Type=new-TypeToken(){}.getType();
byte[]b=new Base64().decodeBase64(leasedTask.getPayloadBase64().getBytes());
字符串有效载荷=新字符串(b);
logger.info(“即将转换有效负载:”+有效负载);
PullQueueTaskPayLoad=new Gson().fromJson(有效载荷,Gson_类型);
因此,从我所做的调试来看,当我解码有效负载字节时,问题似乎正在发生。在编码相同的POJO(使用不同的ID)时,我随机得到2个不同的解码有效负载字符串,如下所示:

    Type GSON_TYPE = new TypeToken<PullQueueTaskPayLoad>() {}.getType();
    byte[] b = new Base64().decodeBase64(leasedTask.getPayloadBase64().getBytes());
    String payload = new String(b);
    logger.info("About to convert payload: "+payload);
    PullQueueTaskPayLoad taskpayload = new Gson().fromJson(payload, GSON_TYPE);
正确解码:

{“id”:“1786024566”,“sliceQueryParameter”:{“queryId”:786024566,“sliceStart”:-1,“sliceNumber”:1,“params”:{“DefaultAnnotation”:{”http://www.slicepedia.org/ontology#hasNumberOfBulletPoints_SIGN:[“\u003d”],“http://www.slicepedia.org/ontology#hasNumberOfBulletPoints":["0"],"http://www.slicepedia.org/ontology#hasNumberOfTokens":["80"],"http://www.slicepedia.org/ontology#hasNumberOfTokens_SIGN:[“\u003e”]},VG:{”http://www.slicepedia.org/ontology#hastense":["?"],"http://www.slicepedia.org/ontology#hasroot:[“?”]}}},“上传URL”:http://3.linguabox0412.appspot.com/_ah/upload/AMmfu6YRjxX23Ks-yh-9AZs4-3I1p6hxrFd6d4ptxSQegUkQHN7y4hNZwX6u7PufIHJbwtsHLXFZJ5P-vs90mslZEOMw0T-amN2qhEOAj_6YdwuY50FXMi8/ALBNUaYAAAAAT7Towgs4M00M5RLI8xnEOMdIxouZzuGu/,“状态”:“进行中”,“操作”:“切片搜索和创建”}

解码错误:

{“id”:“1-1968382407”,“sliceQueryParameter”:{“queryId”:-1968382407,“sliceStart”:-1,“sliceNumber”:1,“params”:{“DefaultAnnotation”:{”http://www.slicepedia.org/ontology#hasNumberOfBulletPoints_SIGN:[“\u003d”],“http://www.slicepedia.org/ontology#hasNumberOfBulletPoints":["0"],"http://www.slicepedia.org/ontology#hasNumberOfTokens":["80"],"http://www.slicepedia.org/ontology#hasNumberOfTokens_SIGN:[“\u003e”]},VG:{”http://www.slicepedia.org/ontology#hastense“:[“?K?????X?\YXK?W?????W?EU$?”和?GG???2?wV和?C)?7?B?6?W?B?gSe???u?d?d?6?S?4UV?d?e7%u和%F?d$F?F?d和vu6?F?F?F?F?vt1466?vt6?d?甦??GD?F?CuF?F?F?D?u?wt?4?C?W?'7FGW2?u?U52?&7F?%4?u?4T?E?5?TDR'


因此,当使用Gson将第二个字符串转换回POJO时,第二个字符串显然失败了。但我不明白为什么这种情况只在某些情况下发生,而在其他情况下不会发生。就我所见,它似乎总是发生在[“?”]字符串。我尝试用其他字符串替换和,但它没有改变任何东西。

我认为这里发生的事情是负载是webSafe-base64编码的。实际上,这意味着为
-
-
-
交换
+/code>。大多数base64库都有支持解码websafe base 64字符串

可能你在某一点遇到了这些字符中的一个,这就扼杀了解码

这里有一些关于

不过,警告一句:taskqueue实现实际上正在发送padding equals(=),您必须在解析之前手动转换它