Search code examples
javarestapijerseyapache-commons-httpclient

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET


I am trying to call login api from java swing desktop application (implemented on jersey web app) with user id and password in header using code below.

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

It gives me error below on line 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)

I tried to remove multiple version of same library from build path and from /.m2/repository/org/apache/ as mentioned in the HttpClient DEF_CONTENT_CHARS and added again, still giving me same error. Any help would greatly appreciated, thanks.


Solution

  • Solved using code below.Please make sure you have following imports.

    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;
    

    Add library using those import and you are good to go with code below.

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