2012-04-29 8 views
4

Я пытаюсь использовать клиентскую библиотеку Twilio для приложения appengine. Он, похоже, не работает как есть, и в клиентской библиотеке должны быть внесены некоторые изменения. Я сделал следующие изменения, но не работает:Клиентская библиотека Twilio на Appengine

public TwilioRestClient(String accountSid, String authToken, String endpoint) { 

    validateAccountSid(accountSid); 
    validateAuthToken(authToken); 

    this.accountSid = accountSid; 
    this.authToken = authToken; 

    if ((endpoint != null) && (!endpoint.equals(""))) { 
     this.endpoint = endpoint; 
    } 



/* origial code 
* ThreadSafeClientConnManager connMgr = new ThreadSafeClientConnManager(); 
*  connMgr.setDefaultMaxPerRoute(10); 
*  this.httpclient = new DefaultHttpClient(connMgr); 
*/ 

//my changes start HERE 
    SchemeRegistry schemeRegistry = new SchemeRegistry(); 
    schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 
    BasicHttpParams params = new BasicHttpParams(); 

    ThreadSafeClientConnManager connMgr = new ThreadSafeClientConnManager(params,schemeRegistry); 
    //my changes END HERE 

    this.httpclient = new DefaultHttpClient(); 

    httpclient.getParams().setParameter("http.protocol.version", 
      HttpVersion.HTTP_1_1); 
    httpclient.getParams().setParameter("http.socket.timeout", 
      new Integer(CONNECTION_TIMEOUT)); 
    httpclient.getParams().setParameter("http.connection.timeout", 
      new Integer(CONNECTION_TIMEOUT)); 
    httpclient.getParams().setParameter("http.protocol.content-charset", 
      "UTF-8"); 

    this.authAccount = new Account(this); 
    this.authAccount.setSid(this.accountSid); 
    this.authAccount.setAuthToken(this.authToken); 

} 

Это заставляет его скомпилировать и запустить, но я получаю это исключение: вызвано следующими причинами: org.apache.http.HttpException: Схема «HTTPS» не зарегистрировано. , когда запрос сделан. Запрос в этом (неизменного) Код:

public TwilioRestResponse request(String path, String method, 
     Map<String, String> vars) throws TwilioRestException { 

    HttpUriRequest request = setupRequest(path, method, vars); 

    HttpResponse response; 
    try { 
     response = httpclient.execute(request); 
     HttpEntity entity = response.getEntity(); 

     Header[] contentTypeHeaders = response.getHeaders("Content-Type"); 
     String responseBody = ""; 

     if (entity != null) { 
      responseBody = EntityUtils.toString(entity); 
     } 

     StatusLine status = response.getStatusLine(); 
     int statusCode = status.getStatusCode(); 

     TwilioRestResponse restResponse = new TwilioRestResponse(request 
       .getURI().toString(), responseBody, statusCode); 

     // For now we only set the first content type seen 
     for (Header h : contentTypeHeaders) { 
      restResponse.setContentType(h.getValue()); 
      break; 
     } 

     return restResponse; 

    } catch (ClientProtocolException e1) { 
     throw new RuntimeException(e1); 
    } catch (IOException e1) { 
     throw new RuntimeException(e1); 
    } 
} 

имеет какой-либо один используется AppEngine для Java с Twilio? Я знаю, что это просто запрос RESTful с использованием XML или JSON с использованием базовой проверки подлинности. Я надеялся использовать клиентскую библиотеку и не тратить время на само кодирование запроса ... Любые идеи?

ответ

3

Новейшая клиентская библиотека Twilio Java зависит от внешних библиотек, которые не играют хорошо с appengine (Apache HttpClient). Первоначальный код клиента Java Twilio просто использовал java.net.HttpURLConnection и не имел внешних зависимостей.

Я добавил этот старый код клиента Twilio java к twilio4j (с паролем исправлений ошибок). Я использую его в производстве.

TODO: Патч должен быть предложен официальному проекту twilio-java, который удобен для приложения.

1

Основная проблема заключается в том, что Twilio-Java использует Apache HttpClient для подключения к серверам Twilio, и из коробки он несовместим с Google AppEngine.

Можно использовать Apache HttpClient on Google AppEngine. Вам нужно будет get the source code и изменить клиентскую библиотеку Twilio-Java в соответствии с этими инструкциями.

Смежные вопросы