Connection error while connecting to cloudant DB from local

泪湿孤枕 提交于 2019-12-07 19:25:36

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!