DocumentList API FullTextQuery ServiceException - 发生了未知错误

时间:2012-04-26 14:38:51

标签: java google-app-engine google-docs-api google-drive-api

对于某些查询,我在10秒后收到此ServiceException 等待回应。

我也试过直接的http get请求和相同的结果。

例如:合约%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 group发布了这个问题,但由于这个组是只读的,我无法获得有关此问题的任何信息。


这是我通过直接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“exceptii de neconstitutionalitate penal”
  2. “litigii de munca”
  3. “moşcrăciunsrl”
  4. “bil terenuri sa bucuresti”
  5. “ordonanta de plata”

1 个答案:

答案 0 :(得分:0)

作为一种解决方法,您可以考虑使用任务队列脱机获取大型文档列表,并序列化要在数据存储区中显示的信息。

如果出现错误,使用任务队列将为您提供自动重试,以及最长10分钟的截止日期和截止日期。