2013-04-03 2 views
3

Je travaille avec Amazon SimpleDB et tente de créer un DB à l'aide du didacticiel suivant. Fondamentalement, il génère une erreur, c'est-à-dire qu'une erreur est survenue: java.lang.String ne peut pas être converti en org.apache.http.HttpHost. Le stacktrace complet est comme ci-dessous:Java - Créer un domaine dans Amazon SimpleDB

Une erreur est survenue: java.lang.String ne peut pas être jeté à org.apache.http.HttpHost java.lang.ClassCastException: java.lang.String ne peut pas être jeté à org. apache.http.HttpHost à org.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 (AWSQueryCo nnection.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)

Mon code est comme ci-dessous (notez que j'ai substitué l'identifiant d'accès AWS et clé secrète avec les valeurs réelles):

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(); 
    } 
} 

Toutes les idées pourquoi l'erreur mentionnée ci-dessus se produit.

J'apprécie toute aide.

Répondre

7

Il semble que vous utilisiez la bibliothèque cliente Typica, qui n'est pratiquement pas entretenue depuis la mi-2011, voir par ex. le rare commmits et le steady growing unresolved issues, où le dernier semble être exactement le vôtre en fait, voir ClassCastException using Apache HttpClient 4.2:

  • Selon le journaliste, les choses semblent être fonctionnels une fois que nous revenir en version à Apache HttpClient 4.1, de sorte que pourrait être une solution de contournement temporaire éventuellement.

De toute façon, je recommande fortement de passer à la AWS SDK for Java officielle (ou l'un de l'autre langue SDKs), qui est non seulement soutenu et entretenu de façon régulière, mais aussi de suivre de près toutes les modifications de l'API AWS (il est vrai ce n'est pas si critique pour Amazon SimpleDB, ce qui est fondamentalement la technologie gelée, mais vous aurez beaucoup plus de facilité à utiliser la pléthore de AWS Products & Services plus tard).

Le SDK inclut deux échantillons (également disponible via l'assistant de boîte à outils Eclipse), parmi ceux que l'on pour SimpleDB - voici un extrait de code condensé concernant votre exemple:

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) { 
    // ... 
} 
+0

HI Steffen Opal, – TokTok123

+0

@AMonari - si vous avez essayé de me envoyer un commentaire, il a été tronqué en quelque sorte. J'ai mis à jour ma réponse avec des détails concernant les problèmes en amont non maintenus/non résolus, où le dernier semble être exactement le vôtre en fait, voir [numéro 135] (http://code.google.com/p/typica/issues/ détail? id = 135). Je pense que cette question et l'absence apparente de réponse du responsable confirment à peu près le point que j'essaie de faire, à savoir que vous ne pouvez plus vous attendre à des corrections dans cette bibliothèque et que vous devez le faire vous-même. l'alternative supérieure existante? –

0

S'il vous plaît essayer de créer une instance de SimpleDB avec le serveur et le port et laissez-moi savoir si cela fonctionne.

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 
} 
+0

Salut Ashish, merci pour l'aide. J'ai attampté votre suggestion ci-dessus et je reçois toujours la même erreur, c'est-à-dire une exception dans le fil "main" java.lang.ClassCastException: java.lang.String ne peut pas être converti en org.apache.http.HttpHost avec la même stacktrace. Des idées pourquoi? merci – TokTok123

+1

@AMonari - Je viens de mettre à jour ma réponse concernant l'amont apparemment identique [issue 135 (ClassCastException using Apache HttpClient 4.2)] (http://code.google.com/p/typica/issues/detail?id=135), ce qui semble indiquer que cela est dû à une incompatibilité introduite lors de l'utilisation d'Apache HttpClient 4.2, alors que la bibliothèque fonctionnait encore avec HttpClient 4.1. –

+0

@Steffen Opel - d'abord j'apprécie vraiment votre contribution. Je suis sorti de cette affaire mais je suis de retour. Je comprends votre point sur le meilleur AWS SDK officiel pour Java et j'essaierai de l'utiliser et je verrai comment ça se passe. – TokTok123

Questions connexes