2012-10-11 87 views
0

使用我在這裏找到的代碼:http://hc.apache.org/httpcomponents-client-ga/quickstart.html我創建了一個快速的HTTP客戶端應用程序。下面的代碼片段:httpcomponents不按照說明書工作

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet(url); 
log.info("Logging in"); 
HttpResponse response; 
try { 
    response = httpclient.execute(httpGet); 
} 
catch (ClientProtocolException cpe) { 
    String msg = "Error logging in with:" + rootUrl; 
    log.error(msg, cpe); 
    throw new BusinessRuleException(msg, cpe); 
} 
catch (IOException ioe) { 
    String msg = "Error logging in with:" + rootUrl; 
    log.error(msg, ioe); 
    throw new BusinessRuleException(msg, ioe); 
} 

try { 
    System.out.println(response.getStatusLine()); 
    HttpEntity entity = response.getEntity(); 
    // do something useful with the response body 
    // and ensure it is fully consumed 
    EntityUtils.consume(entity); 
} 
catch (IOException ioe) { 
    String msg = "Error retrieving login response:" + rootUrl; 
    log.error(msg, ioe); 
    throw new BusinessRuleException(msg, ioe); 
} 
finally { 
    httpGet.releaseConnection(); 
} 

我得到這個異常:

java.lang.NoSuchMethodError: org.apache.http.client.methods.HttpGet.releaseConnection()V 
    at com.xerox.tclg.juror.schedule.RestScheduleRunner.runDailyCheckout(RestScheduleRunner.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276) 
    at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260) 

我發現一些文件提到releaseConnection()是沒有必要的,所以我刪除了finally塊。然後,我得到這個異常:

java.lang.NoSuchMethodError: org.apache.http.util.EntityUtils.consume(Lorg/apache/http/HttpEntity;)V 
    at com.xerox.tclg.juror.schedule.RestScheduleRunner.runDailyCheckout(RestScheduleRunner.java:85) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276) 
    at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260) 

有沒有人見過這個?

+0

您確定運行應用程序時使用的HttpCore包與在IDE中開發和編譯時使用的包相同嗎? – ppeterka

回答

2

在這種情況下,java.lang.NoSuchMethodError很可能意味着您獲得了其中一個Http組件JAR文件的錯誤版本。

如果你能找到「RestScheduleRunner.java:85」中發生了什麼,它可能會幫助你診斷問題。