Friday, January 5, 2018

java.lang.ClassNotFoundException: org.apache.http.conn.ManagedHttpClientConnection

Encountered following while trying to save a file on aws s3:

Trace:

<Jan 5, 2018 4:43:34 PM GMT> <Error> <HTTP> <BEA-101017> <[ServletContext@126209232[app:testservices-ear-0 module:testservices path:/testservices spec-version:2.5]] Root cause of ServletException.
java.lang.NoClassDefFoundError: org/apache/http/conn/ManagedHttpClientConnection
        at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doSendRequest(SdkHttpRequestExecutor.java:50)
        at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
        at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
        at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:843)
        at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:597)
        at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:363)
        at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:329)
        at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:308)
        at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3659)
        at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3612)
        at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:743)
        at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:749)     
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1499)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused By: java.lang.ClassNotFoundException: org.apache.http.conn.ManagedHttpClientConnection
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
        at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doSendRequest(SdkHttpRequestExecutor.java:50)
        at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)

Solution that worked for me

In my it was a jar conflict due to which an older httpclient was being added after adding an exclusion on the older one the problem got resolved. You can see the jar in Dependency Hierarchy in Eclipse.

If httpclient is not coming through transitive dependencies then you can add it to pom.

Add a dependency to httpclient jar.:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.4</version>
</dependency>