2009-10-24 88 views
9

嗨我想搭起一个小的webapp,但我得到以上错误。以下是我的代码java.lang.NoSuchMethodError:org.apache.http.protocol.BasicHttpContext:方法<init>()V未找到

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

我使用httpclient-4.0-beta2.jar和httpcore-4.0.1.jar。它看起来像BasicHttpContext与我的应用程序中的一些其他罐子冲突,但我无法弄清楚。任何线索将不胜感激。

+0

它可能有助于列出您正在运行代码的类路径。有可能是一个微妙的问题,防止加载的目标jar文件... – atk 2009-10-24 05:22:50

+1

我尝试了一个独立的Java程序,并只添加了2个罐子,它工作正常。我的原始应用的Classpath有超过50个罐子,我不确定哪一个是冲突的。 – 2009-10-24 06:50:54

+1

如果你正在使用Eclipse IDE转到Java Broswing视图(windows - > Show view - > Java Broswing),那么浏览Jar文件,你将能够知道关于类/方法/变量等的详细信息。 – Narayan 2009-10-26 06:31:34

回答

9

它看起来像你有一个旧版本/更新版本BasicHttpContext的jar文件。如果发生直接冲突,您将收到ClassNotFoundException。类加载器通常是这种事情的混蛋。在这种情况下,类存在但是没有另一个库(我相信它是httpclient调用Context)的方法被编译。

+0

是的它看起来像我的httpclient用于JDK1.5,httpcore用于JDK1.3。我试图获得JDK1.5的httpcore,但找不到任何和使用较低版本的httpclient抛出更多的错误。 – 2009-10-24 05:59:39

+0

当我试图调用像这样的构造函数时 HttpContext localContext = new BasicHttpContext(); 它说: - 没有找到类型org.apache.http.protocol.BasicHttpContext中的构造函数()的匹配 它肯定与现有jar有冲突,我正朝着根本原因着手并修复。 – 2009-10-24 09:23:03

+4

http://hc.apache.org/httpcomponents-core/httpcore/apidocs/org/apache/http/protocol/BasicHttpContext.html 看起来如果你用httpcore 4.1替换httpcore 4.0你应该没问题。 – Malaxeur 2009-10-24 17:46:40

相关问题