问题
I am new to cloudant. I have written code to connect cloudant DB which is DBaas in bluemix. I have written code locally to connect cloudant DB. Below is the code
try {
user="4728f43d-fcd2-41f0-be63-8945a78a9dab-bluemix";
password="xxxxxxxxxxxxxxxx";
url="https://4728f43d-fcd2-41f0-be63-8945a78a9dab-bluemix:xxxxxxxxxxxxxxxx@4728f43d-fcd2-41f0-be63-8945a78a9dab-bluemix.cloudant.com";
System.setProperty("http.proxyHost", "9.184.9.13");
System.setProperty("http.proxyPort", "80");
//user="8452e722-8945-47d9-b372-ede45e55a7a7-bluemix";
//password="xxxxxxxxxxxxxxxx";
//url="https://8452e722-8945-47d9-b372-ede45e55a7a7-bluemix:xxxxxxxxxxxxxxxx@8452e722-8945-47d9-b372-ede45e55a7a7-bluemix.cloudant.com";
CloudantClient client = ClientBuilder.account(user)
.username(user)
.password(password)
.build();
return client;
} catch (CouchDbException e) {
throw new RuntimeException("Unable to connect to repository", e);
}
I deployed the application locally on web sphere application Liberty profile. While accessing db connection I am getting below exception. Please tell me what needs to be done to connect cloudant DB. I am using cloudant-client-2.2.0.jar to access cloudant DB
[ERROR ] Failed to read cookie response header
Connection refused: connect
[ERROR ] Failed to get response code from request
Connection refused: connect
[err] java.lang.RuntimeException: DB Not found
[err] at com.ibm.util.CloudantClientMgr.getDB(CloudantClientMgr.java:106)
[err] at com.ibm.dao.CloudantDaoImpl.getSiteList(CloudantDaoImpl.java:54)
[err] at com.ibm.service.SocialKeyManagerImpl.getSiteList(SocialKeyManagerImpl.java:60)
[err] at com.ibm.actions.BaseAction.execute(BaseAction.java:56)
[err] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
[err] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
[err] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
[err] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
[err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
[err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
[err] at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1287)
[err] at [internal classes]
[err] at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
[err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207)
[err] at [internal classes]
[err] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[err] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[err] at java.lang.Thread.run(Thread.java:745)
[err] Caused by: com.cloudant.client.org.lightcouch.CouchDbException: Error retrieving server response
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.execute(CouchDbClient.java:535)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.executeToInputStream(CouchDbClient.java:550)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.put(CouchDbClient.java:361)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.put(CouchDbClient.java:351)
[err] at com.cloudant.client.org.lightcouch.CouchDatabaseBase.create(CouchDatabaseBase.java:437)
[err] at com.cloudant.client.org.lightcouch.CouchDatabaseBase.<init>(CouchDatabaseBase.java:61)
[err] at com.cloudant.client.org.lightcouch.CouchDatabase.<init>(CouchDatabase.java:26)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.database(CouchDbClient.java:165)
[err] at com.cloudant.client.api.CloudantClient.database(CloudantClient.java:216)
[err] at com.ibm.util.CloudantClientMgr.getDB(CloudantClientMgr.java:103)
[err] ... 37 more
[err] Caused by: java.net.ConnectException: Connection refused: connect
[err] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[err] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
[err] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[err] at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
[err] at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1676)
[err] at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
[err] at java.security.AccessController.doPrivileged(Native Method)
[err] at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1672)
[err] at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)
[err] at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
[err] at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.execute(CouchDbClient.java:483)
[err] ... 46 more
[err] Caused by: java.net.ConnectException: Connection refused: connect
[err] at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
[err] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
[err] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
[err] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
[err] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
[err] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
[err] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
[err] at java.net.Socket.connect(Socket.java:579)
[err] at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:625)
[err] at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
[err] at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
[err] at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
[err] at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275)
[err] at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
[err] at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
[err] at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:933)
[err] at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
[err] at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)
[err] at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
[err] at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
[err] at com.cloudant.http.interceptors.CookieInterceptor.interceptResponse(CookieInterceptor.java:102)
[err] at com.cloudant.http.HttpConnection.execute(HttpConnection.java:244)
[err] at com.cloudant.client.org.lightcouch.CouchDbClient.execute(CouchDbClient.java:475)
[err] ... 46 more
回答1:
The proxy settings you are using are for HTTP. When creating a CloudantClient
using the account
method it will use HTTPS over HTTP by default. Using a HTTPS proxy should solve your problem.
回答2:
In your code above you appear to have used the system properties for http. As described in the JVM proxies documentation different system properties are required for the JVM wide proxy settings for http vs https. For https they are:
https.proxyHost
https.proxyPort
It is worth noting that you can also set a proxy specifically for use with the CloudantClient
instead of using the system properties for the JVM wide proxy. For example:
CloudantClient client = ClientBuilder.account(user)
.username(user)
.password(password)
.proxyURL(new URL("https://9.184.9.13"))
.build();
I think this option should also work in the case that the proxy only has an http endpoint e.g. proxyURL(new URL("http://9.184.9.13"))
, but obviously in that case your communication would be unencrypted for the leg between the client and the proxy.
回答3:
The proxy configuration worked for me only when set explicitly like this:
Authenticator authenticator = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return (new PasswordAuthentication(cloudantProxyUsername,
cloudantProxyPassword.toCharArray()));
}
};
Authenticator.setDefault(authenticator);
来源:https://stackoverflow.com/questions/34808892/connection-error-while-connecting-to-cloudant-db-from-local