Gson を使用してプル キュー タスクのペイロード内で POJO Java オブジェクトを渡すと、非常に奇妙な状況が発生します。コードを変更したり、タスクのペイロード内に設定されている 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);
私が行ったデバッグから、ペイロードバイトをデコードしているときに問題が発生しているようです。同じ POJO を (異なる ID で) エンコードしているときに、次のように 2 つの異なるデコードされたペイロード文字列をランダムに取得します。
正しいデコード:
{"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":["?"]}}},"uploadURL":"http://3.linguabox0412.appspot .com/_ah/upload/AMmfu6YRjxX23Ks-yh-9AZs4-3I1p6hxrFd6d4ptxSQegUkQHN7y4hNZwX6u7PufIHJbwtsHLXFZJ5P-vs90mslZEOMw0T-amN2qhEOAj_6YdwuY50FXMi8/ALBNUaYAAAAAT7Towgs4M00M5RLI8xnEOMdIxouZzuGu/","status":"IN_PROGRESS","action":"SLICE_SEARCH_AND_CREATE"}
正しくないデコード:
{"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??????H?\?????%?????'W?? EU$?#?&?GG???2?Ɩ?wV&??C"?7?B?6??????W??B???gSe????'u?U'd ?D??6?S??4UV?D?e7?%U?&%F%f?D?$???$&vu6?fF$????EG?v??6?6・vt?D? ??G??&D?fd⋅6%?甦??GD????F???$?V?CuF?$?F?Facref?D??u?wt?4?C$?W?"?'7FGW2#?$ ???$?u$U52"?&7F???#?%4Ĕ4U?4T$4???E?5$TDR'
したがって、Gson を使用して POJO に戻すと、2 番目の文字列は明らかに失敗します。しかし、これが一部のケースでのみ発生し、他のケースでは発生しない理由がわかりません。私が見た限りでは、常に ["?"] 文字列の後に発生するようです。と ? を交換してみました。他の文字列を使用しましたが、何も変わりませんでした。