2017-04-14 32 views
0

我想从下面的代码使用用户名和密码在头中的Java Swing桌面应用程序(在泽西网络应用上实现)调用登录API。线程“AWT-EventQueue-0”中的异常java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET

String authString = username + ":" + password; 
    String authStringEnc = new BASE64Encoder().encode(authString.getBytes()); 
    System.out.println("Base64 encoded auth string: " + authStringEnc); 

    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpGet getRequest = new HttpGet(FVConstants.loginAPI); 
    getRequest.addHeader("Authorization", "Basic " + authStringEnc); 

    HttpResponse response = null; 
    try { 
    response = httpClient.execute(getRequest); 

    if (response.getStatusLine().getStatusCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + response.getStatusLine().getStatusCode()); 


    } 

    BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
      System.out.println(output); 
    } 

    httpClient.getConnectionManager().shutdown(); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

它给了我下面错误就行response = httpClient.execute(getRequest);

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET 
at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175) 
at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158) 
at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) 
at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) 
at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) 
at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
at login.Login.callLoginApi(Login.java:67) 
at login.Login.actionPerformed(Login.java:101) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6533) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 

我试图从构建路径和/.m2/repository/org/apache/删除同一个库的多个版本,如在提到HttpClient DEF_CONTENT_CHARS并再次添加,仍然给我同样的错误。 任何帮助将不胜感激,谢谢。

+0

希望这种联系将帮助你[看到这个链接](http://stackoverflow.com/questions/18246979/java-lang-nosuchfielderror-def-content-charset?noredirect=1&lq=1) –

+0

我已经考虑到了与我尝试的解决方案相同的链接 –

回答

0

使用下面的代码解决。请确保您有以下进口。

import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.HttpClientBuilder; 
import org.apache.http.HttpResponse; 

使用这些导入添加库,你很好用下面的代码去。

private void callLoginApi(String username, String password) 
{ 
    String authString = username + ":" + password; 
    String authStringEnc = new 
    BASE64Encoder().encode(authString.getBytes()); 
    System.out.println("Base64 encoded auth string: " + authStringEnc); 

    HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet request = new HttpGet(FVConstants.loginAPI); 
    request.addHeader("Authorization", "Basic " + authStringEnc); 

    try { 
     HttpResponse response = client.execute(request); 
     System.out.println("response is : "+response.getStatusLine()); 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 
}