edit-icon download-icon

FAQ

Last Updated: Aug 08, 2018

Jar conflicts

Cause analysis

If the following errors occur when you use OSS Java SDK, jar conflicts may exist in your project.

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
  2. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
  3. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
  4. at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:77)
  5. Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
  6. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  7. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  8. at java.security.AccessController.doPrivileged(Native Method)
  9. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  10. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  11. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  12. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  13. ... 3 more

Or

  1. Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
  2. at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
  3. at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
  4. at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
  5. at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
  6. at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
  7. at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
  8. at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
  9. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
  10. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
  11. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
  12. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
  13. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125)
  14. at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:237)
  15. at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78)
  16. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
  17. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
  18. at OSSManagerImpl.upload(OSSManagerImpl.java:42)
  19. at OSSManagerImpl.main(OSSManagerImpl.java:63)

The cause is that OSS Java SDK uses Apache httpclient 4.4.1, while your project uses Apache httpclient or commons-httpclient jar that conflicts with Apache httpclient 4.4.1. To view the jar file and its version used for a project, open OSS Java SDK and run the mvn dependency:tree command. The following figure shows that a project that uses Apache httpclient 4.3.

java-sdk-question1

Solutions

There are two solutions to jar conflicts.

  • Use a unified version. If your project uses the version that conflicts with Apache httpclient 4.4.1, use Apache httpclient 4.4.1 and delete Apache httpclient dependencies of other versions in the pom.xml file. If your project uses commons-httpclient, jar conflicts may also exist. In this case, delete commons-httpclient.
  • Resolve dependency conflicts If your project uses multiple third-party dependencies that have various Apache httpclient versions, dependency conflicts may exist in your project. Use exclusion to resolve the conflicts. For more information, see Maven Guides.

OSS Java SDK is dependent on the following jar versions. Conflict solutions are similar to the httpclien method.

java-sdk-question-2

Missing files

Cause analysis

If the following errors occur when you use OSS Java SDK, your project may lack the necessary files for OSS Java SDK compilation and execution.

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials
  2. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
  3. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
  4. at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
  5. Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
  6. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  7. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  8. at java.security.AccessController.doPrivileged(Native Method)
  9. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  10. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  11. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  12. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  13. ... 3 more

Or

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext
  2. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
  3. at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
  4. at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
  5. Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
  6. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  7. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  8. at java.security.AccessController.doPrivileged(Native Method)
  9. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  10. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  11. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  12. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  13. ... 3 more

Or

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
  2. at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645)
  3. at
  4. at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471)
  5. at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465)
  6. at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:82)
  7. Caused by: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder
  8. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  9. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  10. at java.security.AccessController.doPrivileged(Native Method)
  11. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  12. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  13. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  14. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  15. ... 11 more

Dependencies of OSS Java SDK are as follows:

  • aliyun-sdk-oss-2.2.1.jar
  • hamcrest-core-1.1.jar
  • jdom-1.1.jar
  • commons-codec-1.9.jar
  • httpclient-4.4.1.jar
  • commons-logging-1.2.jar
  • httpcore-4.4.1.jar
  • log4j-1.2.15.jar

In the preceding dependencies, all files except the log4j-1.2.15.jar file are required. You need to add this file to enable access logging.

Solutions

Add OSS Java SDK dependencies to your project. Methods:

  • If your project is in Eclipse, see Method 2: Import a JAR package to your Eclipse project in Java SDK.
  • If your project is in Ant, add OSS Java SDK dependencies to the lib directory.
  • If you directly use the .javac or .java files, run the -classpath command or the -cp command to specify the path where OSS Java SDK dependencies are stored or save the Java SDK dependencies to classpath.

Connection timeout

Cause analysis

If the following errors occur when the OSS Java SDK program is run, possible causes are endpoint errors or unavailable networks:

  1. com.aliyun.oss.ClientException: SocketException
  2. at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71)
  3. at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:116)
  4. at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121)
  5. at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67)
  6. at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92)
  7. at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140)
  8. at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111)
  9. at com.aliyun.oss.internal.OSSBucketOperation.getBucketInfo(OSSBucketOperation.java:1152)
  10. at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1220)
  11. at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1214)
  12. at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:94)
  13. Caused by: org.apache.http.conn.HttpHostConnectException: Connect to oss-test.oss-cn-hangzhou-internal.aliyuncs.com:80 [oss-test.oss-cn-hangzhou-internal.aliyuncs.com/10.84.135.99] failed: Connection timed out: connect
  14. at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
  15. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
  16. at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
  17. at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
  18. at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
  19. at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
  20. at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
  21. at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
  22. at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
  23. ... 9 more

Solutions

You can use OSSProbe for fast troubleshooting.

org.apache.http.NoHttpResponseException: The target server failed to respond

Cause analysis

The following error occurs when the OSS Java SDK program is run:

java-sdk-question-3

The preceding error may occur if expired connections are used. This error occurs only when an earlier version of Java SDK 2.1.2 is used.

Solutions

Upgrade OSS Java SDK to 2.1.2 or a later version.

OSS Java SDK stops responding when the Java program is called

Cause analysis

OSS Java SDK stops responding when the Java program is called. Run the jstack -l pid command to view the stacks. The exception is as follows:

  1. "main" prio=6 tid=0x000000000291e000 nid=0xc40 waiting on condition [0x0000000002dae000]
  2. java.lang.Thread.State: WAITING (parking)
  3. at sun.misc.Unsafe.park(Native Method)
  4. - parking to wait for <0x00000007d85697f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  5. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  6. at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
  7. at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138)
  8. at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306)
  9. at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64)
  10. at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192)
  11. at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185)
  12. at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107)
  13. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276)
  14. at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263)
  15. at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
  16. at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
  17. at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
  18. at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
  19. at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
  20. at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
  21. at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123)
  22. at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68)
  23. at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
  24. at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:146)
  25. at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113)
  26. at com.aliyun.oss.internal.OSSObjectOperation.getObject(OSSObjectOperation.java:229)
  27. at com.aliyun.oss.OSSClient.getObject(OSSClient.java:629)
  28. at com.aliyun.oss.OSSClient.getObject(OSSClient.java:617)
  29. at samples.HelloOSS.main(HelloOSS.java:49)

The cause is due to the connection leak in the connection pool (possibly because ossObject is left unclosed after it is used.).

Solutions

Check your program and ensure that no connection leak occurs. Use the following code to close ossObject:

  1. // Read an object.
  2. OSSObject ossObject = ossClient.getObject(bucketName, objectName);
  3. // Perform operations on OSS.
  4. // Close your ossObject.
  5. ossObject.close();

For more information about troubleshooting, see Troubleshoot OSS Java SDK.

Connection closure

Cause analysis

If the following errors occur when you use ossClient.getObject:

  1. Exception in thread "main" org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 11990526; received: 202880
  2. at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
  3. at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
  4. at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
  5. at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128)
  6. at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
  7. at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
  8. at java.io.FilterInputStream.close(FilterInputStream.java:181)
  9. at java.io.FilterInputStream.close(FilterInputStream.java:181)
  10. at com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147)
  11. at java.io.FilterInputStream.close(FilterInputStream.java:181)
  12. at samples.HelloOSS.main(HelloOSS.java:39)

The cause is that the time between two consecutive data reading exceeds one minute. OSS will close the connections if the time between two consecutive data reading exceeds one minute.

Solutions

If you only need to read part of the data during unfixed periods of time, use Range download to avoid connection closure during data reading.

Memory leaks

Cause analysis

Memory leaks occur when the OSS Java SDK program is run for a period of time (from several hours to several days based on access traffic). We recommend that you use Eclipse Memory Analyzer (MAT) to analyze memory usage. For more information about usage methods, see Use MAT for Head Dump File Analysis.

If the analysis result is similar to the following figure (PoolingHttpClientConnectionManager occupies 96 percent of memory), the cause may be that new OSSClient is run multiple times while ossClient.shutdown is not called. Consequently, memory leaks occur.

java-leaker

Solutions

Ensure that ossClient.shutdown is enabled after OSSClient is enabled.

InterruptedException occurs when ossClient.shutdown is called

Cause analysis

The following exception occurs when ossClient.shutdown is called:

  1. java.lang.InterruptedException: sleep interrupted
  2. at java.lang.Thread.sleep(Native Method)
  3. at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper:76)

The cause is that the backend thread (IdleConnectionReaper) of ossClient will close connections periodically. If ossClient.shutdown is called when IdleConnectionReaper is in the Sleep mode, the preceding exception occurs.

Solutions

OSS Java SDK 2.3.0 has rectified this error.

For versions earlier than OSS Java SDK 2.3.0, use the following code to ignore the error:

  1. try {
  2. ossClient.shutdown();
  3. } catch(Exception e) {
  4. }

Other errors

For more information about how to rectify other errors returned by OSS, see “Errors and troubleshooting.”

Thank you! We've received your feedback.