2009-10-24 9 views
9

Salut J'essaie de mettre en place une petite webapp mais je suis au-dessus de l'erreur. Ci-dessous est mon codejava.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: méthode <init>() V pas trouvé

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("SomeURL"); // Using a URL local to my machine 
// after setting nameValuePair and setting it on httppost 
httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 

// This is where I am getting the above mentioned exception 
HttpResponse response = httpclient.execute(httppost); 

J'utilise httpclient-4.0-beta2.jar et httpcore-4.0.1.jar. Il semble que BasicHttpContext soit en conflit avec d'autres fichiers jar de mon application, mais je n'ai pas pu le comprendre. Toute idée sera appréciée.

+0

il peut être utile de lister le chemin de classe avec lequel vous exécutez votre code. il peut y avoir un problème subtil empêchant le chargement du fichier jar prévu ... – atk

+1

J'ai essayé avec un programme java autonome et ajouté seulement ces 2 pots et cela fonctionne bien. Classpath de mon application d'origine a plus de 50 pots, je ne suis pas sûr de savoir lequel est en conflit. –

+1

Si vous utilisez Eclipse IDE dans Java Broswing view (windows -> Afficher la vue -> Java Broswing) puis naviguez dans le fichier Jar, vous serez en mesure de connaître les détails de la classe/méthodes/variables etc – Narayan

Répondre

9

Il semble que vous ayez un fichier jar avec une ancienne/version plus récente de BasicHttpContext. S'il y avait un conflit direct, vous recevriez un ClassNotFoundException. ClassLoaders sont généralement des saccades à propos de ce genre de chose. Dans ce cas, la classe existe cependant n'a pas la méthode qu'une autre bibliothèque (je crois que c'est httpclient qui appelle le Context) a été compilée.

+0

Oui On dirait que mon httpclient est pour JDK1.5 et que httpcore est pour JDK1.3. J'ai essayé d'obtenir httpcore pour JDK1.5 mais je n'en ai pas trouvé et l'utilisation de la version inférieure de httpclient génère beaucoup plus d'erreurs. –

+0

Lorsque j'ai essayé d'appeler le constructeur comme ceci HttpContext localContext = new BasicHttpContext(); il est dit: - Aucune correspondance n'a été trouvée pour constructor() dans le type org.apache.http.protocol.BasicHttpContext C'est sûrement un conflit avec un pot existant, je suis en train d'avancer vers rootcause et de corriger. –

+4

http://hc.apache.org/httpcomponents-core/httpcore/apidocs/org/apache/http/protocol/BasicHttpContext.html On dirait que si vous remplacez httpcore 4.0 par httpcore 4.1, ça devrait aller. – Malaxeur