UnknownHostException при попытке подключения к Cloudant DB через Ektorp - PullRequest
1 голос
/ 23 апреля 2011

Это не то, как нужно подключаться к размещенной базе данных Cloudant с помощью Ektorp .Я использую Ektorp 1.1 в Eclipse через новую m2eclipse Maven интеграцию (что довольно мило).Я изо всех сил пытаюсь найти хорошую документацию CouchDB / Cloudant / Ektorp, отличную от javadocs.

Я пытаюсь получить пример примера API Ektorp с их главной страницы для работы:

HttpClient httpClient = new StdHttpClient.Builder()
                                    .host("localhost")
                                    .port(5984)
                                    .build();

CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient);
CouchDbConnector db = new StdCouchDbConnector("mydatabase", dbInstance);

db.createDatabaseIfNotExists();

Неважно, что я использую для создания httpClient, я всегда получаю ошибку UnknownHostException ниже.Я пробовал эти URL для хоста: https / http://cloudant.com/db/_session и https / http://[username].cloudant.com

А как насчет номера порта?Если имя пользователя и пароль должны быть включены в StdHttpClient.Builder ()?

Вот полная ошибка - сбой при вызове createDatabaseIfNotExists (), но я не уверен, что переменная CouchDbConnector верна.

Exception in thread "main" org.ektorp.DbAccessException: java.net.UnknownHostException: https://cloudant.com/db/_session
    at org.ektorp.util.Exceptions.propagate(Exceptions.java:19)
    at org.ektorp.http.StdHttpClient.executeRequest(StdHttpClient.java:104)
    at org.ektorp.http.StdHttpClient.get(StdHttpClient.java:42)
    at org.ektorp.http.RestTemplate.get(RestTemplate.java:21)
    at org.ektorp.impl.StdCouchDbInstance.getAllDatabases(StdCouchDbInstance.java:61)
    at org.ektorp.impl.StdCouchDbConnector.createDatabaseIfNotExists(StdCouchDbConnector.java:256)
    at com.codegouge.examples.App.main(App.java:30)
Caused by: java.net.UnknownHostException: https://cloudant.com/db/_session
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
    at java.net.InetAddress.getAllByName(InetAddress.java:1084)
    at java.net.InetAddress.getAllByName(InetAddress.java:1020)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:126)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at org.ektorp.http.StdHttpClient.executeRequest(StdHttpClient.java:96)

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Так что я делал пару вещей неправильно.Для использования SSL требуются дополнительные параметры .Также Ektorp 1.1.1 включает исправления ошибок, связанных с SSL до 1.1.0.Итак, это мой последний конструктор HttpClient:

HttpClient httpClient = new StdHttpClient.Builder()
        .host("[username].cloudant.com")
        .port(443)
        .username("[username]")
        .password("[password]")
        .enableSSL(true)
        .relaxedSSLSettings(true)
        .build();

Также, обязательно обновите зависимость ektorp в pom.xml, чтобы найти версию "1.1.1".У меня есть запись в блоге, освещающая это упражнение здесь , если интересно.

1 голос
/ 04 сентября 2014

Вы также можете использовать URL для связи с Ektorp:

JSONObject serviceAttr = val.getJSONObject(0);
                        JSONObject credentials = serviceAttr.getJSONObject("credentials");
                        httpClient = new StdHttpClient.Builder()
                        .url(credentials.getString("url"))
                        .build();

Это простой способ подключения. Я нашел учебник для подключения с помощью Ektorp 1.4.2: http://www.ibm.com/developerworks/java/library/j-hangman-app/index.html

0 голосов
/ 23 апреля 2011

Я не очень знаком с Ektorp, но вам определенно нужно будет ввести там свое имя пользователя / пароль. Я бы предложил создать HttpClient со следующим кодом:

HttpClient httpClient = new StdHttpClient.Builder()
                                    .host("[username].cloudant.com")
                                    .port(443)
                                    .username("[username]")
                                    .password("[password]")
                                    .build();

Я изменил порт на 443 (по умолчанию для HTTPS, который слушает Cloudant) и добавил имя пользователя и пароль. Я не вижу способа сообщить Ektorp, что вы хотите использовать HTTPS, но, если повезет, это будет обработано внутри.

...