restlet / restlet-framework-java

The first REST API framework for Java
https://restlet.talend.com
648 stars 284 forks source link

HTTPS is not possible on Android when using ext.httpclient #973

Open x12a1f opened 9 years ago

x12a1f commented 9 years ago

When using the ext.httpclient it is not possible to use https. On Android it seems to be disabled:

I am using org.restlet.ext.httpclient (because I need to use PATCH which is not supported by the standard http client) and register it in my Android application:

Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null));

but now I get the following exception:

Internal Connector Error (1002) - The connector encountered an 
unexpected condition which prevented it from fulfilling the request
             at 
org.restlet.resource.ClientResource.doError(ClientResource.java:599)
...
      Caused by: java.lang.IllegalStateException: Scheme 'https' not 
registered.
             at 
org.apache.http.conn.scheme.SchemeRegistry.getScheme(SchemeRegistry.java:80)
             at 
org.apache.http.impl.conn.ProxySelectorRoutePlanner.determineRoute(ProxySelectorRoutePlanner.java:157)
             at 
org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:596)
             at 
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
             at 
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
...

It seems https support is disabled on Android:

https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet.ext.httpclient/src/org/restlet/ext/httpclient/HttpClientHelper.java#L284

See also

http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2702808

thboileau commented 9 years ago

Hello @ralphvanetten ,

sorry for the late answer. After having read some documentation, especially this page "http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html", I think it should be better to rely on the default client connector based on the HttpUrlConnection class. I read:

For Android 2.3 (Gingerbread) and later, HttpURLConnection is the best choice.

@jlouvel, @ralphvanetten, do you think we should ship the Android edition with the HttpClient extension?

Best regards, Thierry Boileau

jlouvel commented 9 years ago

@thboileau I think we should keep it as is in RF 2.3, also it has already been removed from master/RF 3.0

x12a1f commented 9 years ago

Although it might be better to use HttpURLConnection, I need to use PATCH which seems not to be supported by HttpURLConnection.