1

一部のクエリでは、応答を 10 秒間待機した後にこの ServiceException を受け取ります。

また、直接 http get リクエストを試してみましたが、同じ結果が得られました。

例: Contract%20Colectiv%20de%20Munc%C4%83

1. My code: 

    URL feedUrl = new URL("https://docs.google.com/feeds/default/private/ full/folder%3A" + folderId + "/contents/-/pdf");                        
    DocumentQuery query = new DocumentQuery(feedUrl); 
    query.setFullTextQuery(searchText); 
    client.setConnectTimeout(0);// with or without this line I receive the same result (I also put 30000 value - same result) 
    client.setReadTimeout(0);// with or without this line I receive the same result 

    DocumentListFeed feed = client.getFeed(query, DocumentListFeed.class); 


2. This is the stacktrace for the exception that I receive with documentlist api query: 

    com.google.gdata.util.ServiceException: An unknown error has occurred. 
    <errors xmlns='http://schemas.google.com/g/2005'>
    <error><domain>GData</domain><code>ServiceException</code>
    <internalReason>An unknown error has occurred</internalReason>
    </error></errors> 
    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:624)
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563) 
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java: 552) 
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java: 530) 
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535) 
    at com.google.gdata.client.Service.getFeed(Service.java:1135) 
    ... 

3. This is the exception I receive with direct http get request: 

     java.io.IOException: Server returned HTTP response code: 500 for URL: https://docs.google.com/feeds/default/private/full/folder%3[my_folder_doc-id]/contents/-/pdf?q="[query_text]"&max-results=25 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java: 1436) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java: 379) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java: 318) 
    at GoogleDocsManager.googleSearch(GoogleDocsManager.java:281) 

追加情報:

1. My folder contains almost 300k files. Could this be the problem? 
2. In ~85% of searches I get the correct response () 
3. In browser the same interogation returns "The server encountered an error. Please try again later", but after refresh works fine. 

この問題の「回避策」を得るのを手伝ってくれる人はいますか? またはそれを回避する方法は?

この問題を数か月前にdocumentlist api グループに投稿しましたが、このグループは読み取り専用であるため、この問題に関する情報を取得できません。


これは、直接 http リクエストで取得した 500 レスポンスです (~10 秒後):

<errors xmlns='http://schemas.google.com/g/2005'>
    <error>
        <domain>GData</domain>
        <code>ServiceException</code>
        <internalReason>An unknown error has occurred.</internalReason>
    </error>
</errors>

これはコードです:

URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full/folder%3A" +  folderId + "/contents/-/pdf?max-results=25&q=" + searchText);                        

HttpURLConnection copyHttpUrlConn = (HttpURLConnection) feedUrl.openConnection(); 
copyHttpUrlConn.setDoOutput(true); 
copyHttpUrlConn.setRequestMethod("GET");            
copyHttpUrlConn.setRequestProperty("GData-Version", "3.0");
copyHttpUrlConn.setRequestProperty("Authorization", "GoogleLogin auth=" + authToken);
int respCode = copyHttpUrlConn.getResponseCode(); 

System.out.println("Response  code: " + respCode);

InputStreamReader isr = null;
if(respCode != 200){
    isr = new InputStreamReader(copyHttpUrlConn.getErrorStream());
}
else{
    isr = new InputStreamReader(copyHttpUrlConn.getInputStream());
}
BufferedReader br = new BufferedReader(isr); 

String line = null;
while((line = br.readLine()) != null){
    System.out.println(line); 
}

問題のあるその他の最近のクエリ:

  1. title:2012-05 「憲法違反の例外」
  2. 「リティジ・デ・ムンカ」
  3. "moş crăciun srl"
  4. 「bil terenuri sa bucuresti」
  5. 「オルドナンタ デ プラタ」
4

1 に答える 1

0

回避策として、タスク キューを使用して大きなドキュメント リストをオフラインで取得し、データストアに表示する情報をシリアル化することを検討できます。

タスク キューを使用すると、エラーが発生した場合に自動再試行が行われ、urlfetch と処理の期限が最大 10 分間締め切られます。

于 2012-04-27T12:25:05.530 に答える