并不是单击使用Ektorp如何连接到托管Cloudant数据库的方式。我正在通过新的m2eclipse Maven集成在Eclipse中使用Ektorp 1.1(这很不错)。除了Javadocs之外,我还在努力寻找好的CouchDB / Cloudant / Ektorp文档。

我正在尝试从他们的main page中获取示例Ektorp API示例:

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:// [用户名] .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)

最佳答案

我对Ektorp不太熟悉,但是您肯定需要在其中输入用户名/密码。我建议使用以下代码创建HttpClient:

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


我已将端口更改为443(Cloudant监听的HTTPS的默认端口),并添加了用户名和密码。我看不到让Ektorp知道您要使用HTTPS的任何方法,但幸运的是,它将在内部处理。

10-08 00:48