Java -在Amazon SimpleDB中创建域



我正在使用Amazon SimpleDB,并尝试使用以下教程创建一个DB。基本上它会抛出一个错误,即发生错误:java.lang.String不能被强制转换为org.apache.http.HttpHost。完整的堆栈跟踪如下:

发生错误:java.lang.String不能强制转换为org.apache.http.HttpHostjava.lang.ClassCastException: java.lang.String不能被强制转换为org.apache.http.HttpHostorg.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java: 416)org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java: 906)org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java: 805)org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java: 784)com.xerox.amazonws.common.AWSQueryConnection.makeRequest (AWSQueryConnection.java: 474)com.xerox.amazonws.sdb.SimpleDB.makeRequestInt (SimpleDB.java: 231)com.xerox.amazonws.sdb.SimpleDB.createDomain (SimpleDB.java: 155)com.amazonsimpledb.SDBexample1.main (SDBexample1.java: 19)

我的代码如下(注意我已经用实际值替换了AWS访问id和密钥):

public static void main(String[] args) {
     String awsAccessId = "My aws access id";
     String awsSecretKey = "my aws secret key";
     SimpleDB sdb = new SimpleDB(awsAccessId, awsSecretKey, true);
     try {
        Domain domain = sdb.createDomain("cars");
        System.out.println(domain);
    } catch (com.xerox.amazonws.sdb.SDBException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

关于上述错误发生的原因有什么想法吗?

感谢您的帮助。

似乎你正在使用Typica客户端库,这是自2011年中期以来几乎没有维护过的,例如看到罕见的提交和稳定增长的未解决的问题,其中最新的一个似乎正是你的事实,参见ClassCastException使用Apache HttpClient 4.2:

    根据记者的说法,一旦我们降级到Apache HttpClient 4.1,事情似乎是正常的,所以这可能是一个临时的解决方案。

无论哪种方式,我都强烈建议切换到官方的AWS Java SDK(或其他语言SDK之一),它不仅以常规方式支持和维护,而且还密切跟踪所有AWS API的变化(诚然,这对Amazon SimpleDB来说并不是那么重要,它基本上是冻结的技术,但使用大量的AWS产品会更容易。

    此外,如果您正在使用该IDE,您可以从AWS Toolkit for Eclipse中受益。

SDK包括几个示例(也可以通过Eclipse Toolkit向导获得),其中一个是用于SimpleDB的—这里是关于您的示例的浓缩代码摘录:

BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
    awsAccessId, awsSecretKey);
AmazonSimpleDB sdb = new AmazonSimpleDBClient(basicAWSCredentials);
Region usWest2 = Region.getRegion(Regions.US_WEST_2);
sdb.setRegion(usWest2);
try {
    // Create a domain
    String myDomain = "MyStore";
    System.out.println("Creating domain called " + myDomain + ".n");
    sdb.createDomain(new CreateDomainRequest(myDomain));
    // ...
    // Delete a domain
    System.out.println("Deleting " + myDomain + " domain.n");
    sdb.deleteDomain(new DeleteDomainRequest(myDomain));
} catch (AmazonServiceException ase) {
    // ...
} catch (AmazonClientException ace) {
    // ...
}

请尝试与服务器和端口创建SimpleDB实例,并让我知道它是否有效。

public SimpleDB objSimpleDB = null;
private String awsAccessKeyId = "access key";
private String awsSecretAccessKey = "secret key";
private boolean isSecure= true;
private String server = "sdb.amazonaws.com";
private int port=443;
try{
SimpleDB objSimpleDB = new SimpleDB(awsAccessKeyId, awsSecretAccessKey, isSecure, server, port);
Domain domain = objSimpleDB .createDomain("cars");
} catch (com.xerox.amazonws.sdb.SDBException e) {
      //handle error
}

最新更新