2014-08-27 4 views
0

Я пытаюсь принести полное имя сотрудника, используя URL Fetch и службы каталогов в App двигателяURL выборки таймаут исключение в Google App Engine

String url = "myurl"+email; 
try { 

     final URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService(); 

    final HTTPRequest httpRequest = new HTTPRequest(new URL(url)); 
    final HTTPResponse httpResponse = urlFetchService.fetch(httpRequest); 

    ByteArrayInputStream input = new ByteArrayInputStream(httpResponse.getContent()); 


String driveJson = IOUtils.toString(input); 
      JSONObject driveJsonObject = (JSONObject) JSONValue.parseWithException(driveJson); 




if((JSONArray) driveJsonObject.get("items")==null){ 

}else{ 
     JSONArray driveJsonArray = (JSONArray) driveJsonObject.get("items"); 





    for(int i=0;i<driveJsonArray.size();i++){ 
      JSONObject firstGenre = (JSONObject) driveJsonArray.get(i); 



      fName=firstGenre.get("firstName").toString(); 
      lName=firstGenre.get("lastName").toString(); 

      Fullname=fName+" "+lName; 
    } 
} 

Сведения об ошибке: Ошибка ПОЛУЧАТЬ FULLNAME Таймаут при выборке URL: https://mydirectory.appspot.com/directory/v1/query/[email protected]

Я получил это исключение только несколько раз. может ли кто-нибудь предложить возможное решение для этого.

Я прочитал следующие строки на Google App Engine FAQ

Вы можете установить срок для запроса, наибольшее количество времени услуга будет ждать ответа. По умолчанию крайний срок для выборки составляет 5 секунд. Максимальный срок составляет 60 секунд для HTTP-запросов и 10 минут для задач очереди задач и запросов на работу cron. При использовании интерфейса URLConnection служба использует тайм-аут соединения (setConnectTimeout()) плюс тайм-аут чтения (setReadTimeout()) в качестве крайнего срока.

ответ

2

Как часто задаваемые вопросы, вы должны использовать URLConnection вместо URLFetchService. Затем вы можете установить setConnectTimeout(..) и setReadTimeout(..).

+0

это не единственный вариант – NimChimpsky

0

Или вы можете установить срок в FetchOptions, soemthign нравится:

private FetchOptions fetchOptions = FetchOptions.Builder.withDefaults(); 

    public void doSomething() { 
     fetchOptions.setDeadline(10d); 
     HTTPRequest httpRequest = new HTTPRequest(url, HTTPMethod.GET, fetchOptions); 
    } 
Смежные вопросы