3

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

发生错误:java.lang.String 无法转换为 org.apache.http.HttpHost java.lang.ClassCastException:java.lang.String 无法在 org.apache.http.impl 中转换为 org.apache.http.HttpHost。 client.DefaultRequestDirector.execute(DefaultRequestDirector.java:416) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient. java:805) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) at com.xerox.amazonws.common.AWSQueryConnection.makeRequest(AWSQueryConnection.java:474) at 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();
    }
}

关于为什么会发生上述错误的任何想法。

我感谢任何帮助。

4

2 回答 2

7

看来您正在使用Typica客户端库,该库自 2011 年中期以来几乎没有维护过,请参阅例如罕见的提交稳定增长的未解决问题,其中最新的似乎正是您的问题,请参阅使用 Apache HttpClient 4.2 的 ClassCastException

  • 据记者称,一旦我们降级回 Apache HttpClient 4.1,一切似乎都可以正常工作,所以这最终可能是一个临时的解决方法。

无论哪种方式,我都强烈建议切换到官方的AWS SDK for Java(或其他语言SDK之一),它不仅受到定期支持和维护,而且还密切跟踪所有 AWS API 更改(诚然,这不是t 这对于Amazon SimpleDB至关重要,它基本上是冻结技术,但您稍后会更轻松地使用过多的AWS 产品和服务)。

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) {
    // ...
}
于 2013-04-04T15:26:06.367 回答
0

请尝试使用服务器和端口创建 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
}
于 2013-04-05T04:55:04.740 回答