【问题标题】:DocumentList API FullTextQuery ServiceException - An unknown error has occuredDocumentList API FullTextQuery ServiceException - 发生未知错误
【发布时间】:2012-04-26 14:38:51
【问题描述】:

对于某些查询,我在 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 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ăciun srl”
  4. "bil terenuri sa bucuresti"
  5. "ordonanta de plata"

【问题讨论】:

  • 您是否尝试过打印出您通过直接请求获得的 500 响应的正文?这可能会告诉你更多关于这个问题的信息。另外,您真的在 Google Docs 中有 300,000 个文档吗?!
  • 嗨尼克,是的,我有大约 300k (96 GB) 文件,其中 95% 是小型 pdf 文件。这会是个问题吗? (*) 我将写 500 响应作为对我的问题的答复。

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


【解决方案1】:

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

如果出现错误,使用任务队列会给你自动重试,并且 urlfetch 和处理截止日期最长为 10 分钟。

【讨论】:

  • 在 api 中,与我重试多少次无关,我收到相同的 500 响应。我的问题是我无法得到结果,因为查询在 10 秒后失败。
猜你喜欢
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多