2013-09-25 11 views
5

私はGoogleスプレッドシートの行を操作するアプリケーションを持っています。時折、私はListEntry.update()を呼び出したときに、私は次のスタックトレース受け取る:これらのドキュメントによるとGoogle Docs Java APIのListEntry.update()のcom.google.gdata.util.PreconditionFailedException

https://developers.google.com/gdata/javadoc/com/google/gdata/data/spreadsheet/ListEntry

https://developers.google.com/gdata/javadoc/com/google/gdata/data/BaseEntry#update()

、:ここで

Exception in thread "main" java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: com.google.gdata.util.PreconditionFailedException: Precondition Failed 
Mismatch: etags = ["E10QemAgYit7ImA-CEFaShYM"], version = [2ag9hk74om621l] 
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:614) 
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564) 
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560) 
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538) 
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536) 
at com.google.gdata.client.Service.update(Service.java:1563) 
at com.google.gdata.client.Service.update(Service.java:1530) 
at com.google.gdata.client.GoogleService.update(GoogleService.java:597) 
at com.google.gdata.data.BaseEntry.update(BaseEntry.java:639) 
at feedProcessor.ProcessClientFeed.UpdateRow(ProcessClientFeed.java:466) 
at feedProcessor.ProcessClientFeed.updateGoogleSpreadsheet(ProcessClientFeed.java:404) 
at feedProcessor.ProcessClientFeed.processFeed(ProcessClientFeed.java:318) 
at feedProcessor.ProcessClientFeed.main(ProcessClientFeed.java:61) 
... 5 more 

答えて

4

を関連文書でありますupdate()関数はPreconditionFailedExceptionをスローすることさえできないので、ドキュメントは本質的に役に立たない。この問題をテストすると、セッション内で同じ行のupdate()関数を複数回呼び出すとこの例外がスローされることがわかりました。 'セッション'を定義する正確なことはまだ不明ですが、すべての行を複数回ループし、各繰り返しで各行でupdate()を呼び出すと、このエラーが発生します。私が知っている唯一の解決策は、各行(ListEntry)がupdate()を1回だけ呼び出すようにソフトウェアを書くことです。

3

問題はGoogle Spreadsheet API Resource Versioning mecanismが原因です。

どんなエントリを編集しないことができるように - ちょうど使用:

entry.setEtag("*") 

を更新する前に。

はい、これはマルチユーザーフレンドリーではありません。マルチユーザーサポートが必要な場合は、フィードを再取得してください。