2012-04-26 49 views
1

对于某些查询我收到的 10秒等待响应后,这个ServiceException。DocumentList API FullTextQuery ServiceException - 未知错误已发生

我也直接HTTP试图获取请求和相同的结果。

例:合同%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但由于这组是只读的,我不能获得有关这个问题的任何信息。


这是500的响应我直接HTTP请求得到(后〜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 neconstitut ionalitate刑法”
  2. “litigii德munca”
  3. “MOScrăciunSRL”
  4. “BIL terenuri SA布加勒斯特”
  5. “ordonanta去普拉塔”
+0

你试过打印出500的回应,您有一个直接请求得到的身体吗?这可能会告诉你更多关于这个问题。另外,您在Google文档中认真拥有300,000个文档? – 2012-04-27 01:35:50

+0

嗨尼克, 是的,我有30万〜(96 GB)的文件,其中95%是小PDF文件。这可能是一个问题吗? (*)我会写500响应,我的问题的答复。 – 2012-04-27 09:00:09

回答

0

正如你可以考虑提取的一种解决方法使用任务队列离线大文档列表,以及序列化要在数据存储中显示的信息。

使用任务队列会给你自动重试,如果有错误,并且最多10分钟的urlfetch和处理期限的最后期限。

+0

在api中,它不会影响我做了多少次重试,我收到了同样的500响应。我的问题是我无法获得结果,并且因为查询在10秒后失败。 – 2012-04-27 13:06:46

+0

哦,我以为你说这是85%的时间工作。 – proppy 2012-04-27 13:53:40