首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnknownHostException尝试通过Ektorp连接到云数据库

UnknownHostException尝试通过Ektorp连接到云数据库
EN

Stack Overflow用户
提问于 2011-04-23 10:22:44
回答 3查看 1.6K关注 0票数 1

这并不是在点击如何使用Ektorp连接到托管的云数据库。我在Eclipse中通过新的m2eclipse Maven集成使用Ektorp1.1(这很不错)。我正在努力寻找除了javadoc之外的好的CouchDB/Cloudant/Ektorp文档。

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

代码语言:javascript
复制
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变量是否正确。

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-23 22:46:55

我对Ektorp不是很熟悉,但你肯定需要把你的用户名/密码放进去。我建议使用以下代码创建HttpClient:

代码语言:javascript
复制
HttpClient httpClient = new StdHttpClient.Builder()
                                    .host("[username].cloudant.com")
                                    .port(443)
                                    .username("[username]")
                                    .password("[password]")
                                    .build();

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

票数 0
EN

Stack Overflow用户

发布于 2011-04-24 05:02:14

所以我做错了几件事。使用SSL requires additional parameters。另外,将Ektorp 1.1.1 includes SSL-related bug fixes设置为1.1.0。这是我的最后一个HttpClient构造函数:

代码语言:javascript
复制
HttpClient httpClient = new StdHttpClient.Builder()
        .host("[username].cloudant.com")
        .port(443)
        .username("[username]")
        .password("[password]")
        .enableSSL(true)
        .relaxedSSLSettings(true)
        .build();

此外,请确保在pom.xml中更新ektorp的依赖项以查找版本"1.1.1“。如果有兴趣,我有一篇博客文章介绍了这个练习here

票数 3
EN

Stack Overflow用户

发布于 2014-09-05 02:46:05

您还可以使用URL与Ektorp连接:

代码语言:javascript
复制
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进行连接的教程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5761712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档