Usually you would call your rest interface by doing something like this:
ServiceInterface myServiceClass = (ServiceInterface)ProxyFactory.create(ServiceInterface.class,url);What I found was if I tried to use a https URL this would fail with a 'PeerUnverified' exception as it (of course) doesn't trust the dodgy CA I used to issue my server certificate. In addition I want to provide client credentials so I can validate my identity when talking to the server. It turns out the way you do this is you provide a ClientExecutor object as the 3rd parameter to the ProxyFactory.create() method and this object is used to communicate with the server. It's a bit worse than that as you have to create a HttpConnection and then get the SchemeRegistry and add a mapping for https that uses a custom SSLSocketFactory. You create a SSLSocketFactory that knows about the KeyStore with your client credentials and your KeyStore in which your trusted CA cert lives. So anyway the code looks like this:
SSLSocketFactory sslSocketFactory = new SSLSocketFactory(clientCreds,credentialsPass,trustStore); DefaultHttpClient httpClient = new DefaultHttpClient();ClientConnectionManager conManager = httpClient.getConnectionManager(); SchemeRegistry schemeRegistry = conManager.getSchemeRegistry(); schemeRegistry.register(new Scheme("https",8443,sslSocketFactory)); ClientExecutor executor = ApacheHttpClient4Executor(httpClient); ServiceInterface myServiceClass = (ServiceInterface)ProxyFactory.create(ServiceInterface.class,url,executor);
Thanks
ReplyDeleteIt was useful.
Thanks! I had trouble figuring it out too and hence the post.
ReplyDelete