すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Javaに関するFAQ

最終更新日:May 08, 2024

このトピックでは、Object Storage Service (OSS) SDK for Javaを使用するときに発生する可能性のある一般的なエラーの原因と解決策について説明します。

JARパッケージの競合

  • 原因

    応答が次のいずれかの応答に似ている場合、プロジェクトにはパッケージの競合があります。

    スレッド "main" java.lang.NoClassDefFoundErrorの
    例外: org/apache/http/ssl/TrustStrategy
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
        com.aliyun.oss.de mo.HelloOSS.main(HelloOSS.java:77) で
    原因: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... さらに3
                        

    スレッド "main" java.lang.NoSuchFieldErrorの
    例外: INSTANCE
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
     at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
     at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125)
     at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:237)
     at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78)
     at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
     at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
     at OSSManagerImpl.upload(OSSManagerImpl.java:42)
     at OSSManagerImpl.main(OSSManagerImpl.java:63)
                        

    OSS SDK for JavaはApache HttpClient 4.4.1を使用しますが、プロジェクトはApache HttpClient 4.4.1と競合するApache HttpClientまたはCommons HttpClient JARパッケージを使用します。 JARパッケージとプロジェクトで使用されているバージョンを表示するには、プロジェクトのディレクトリでmvn dependency: treeコマンドを実行します。 次の図は、プロジェクトでApache HttpClient 4.3が使用されていることを示しています。

  • 解決策

    次のいずれかの方法を使用して、JARパッケージの競合を解決できます。

    • 同じバージョンのApache HttpClientを使用します。 プロジェクトでApache HttpClient 4.4.1と競合するバージョンを使用している場合は、Apache HttpClient 4.4.1を使用し、pom.xmlファイルから他のバージョンの依存関係を削除します。 プロジェクトでCommons HttpClientを使用すると、競合が発生する可能性もあります。 これらの競合を解決するには、Commons HttpClientを削除します。

    • 依存関係にある競合を削除します。 プロジェクトに複数の依存するサードパーティパッケージがあり、サードパーティパッケージが異なるバージョンのApache HttpClientに依存している場合、プロジェクトで依存関係が競合する可能性があります。 これらの依存関係を除外する必要があります。 詳細については、「オプションと除外」をご参照ください。

    OSS SDK for Javaは、次のパッケージバージョンに依存しています。 競合の解決策は、HttpClientの場合と同様です。

パッケージがありません

  • 原因

    レスポンスが次のいずれかのレスポンスに似ている場合、OSS SDK for Javaをコンパイルまたは実行するために必要なパッケージがプロジェクトにない可能性があります。

    スレッド "main" java.lang.NoClassDefFoundErrorの
    例外: org/apache/http/auth/Credentials
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
            com.aliyun.oss.de mo.HelloOSS.main(HelloOSS.java:76) で
    原因: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... さらに3
                        

    スレッド "main" java.lang.NoClassDefFoundErrorの
    例外: org/apache/http/protocol/HttpContext
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
            at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
            com.aliyun.oss.de mo.HelloOSS.main(HelloOSS.java:76) で
    原因: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... さらに3
                        

    スレッド "main" java.lang.NoClassDefFoundErrorの
    例外: org/jdom/input/SAXBuilder
            at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645)
            at … … 
            at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471)
            at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465)
            com.aliyun.oss.de mo.HelloOSS.main(HelloOSS.java:82) で
    原因: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... さらに11
                        

    OSS SDK for Javaには次の依存関係があります。

    • 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

    OSS SDK for Javaをコンパイルまたは実行するには、log4j-1.2.15.jarパッケージを除くすべてのパッケージが必要です。 ただし、ロギングを有効にする場合は、log4j-1.2.15.jarパッケージも含める必要があります。

  • 解決策

    次のいずれかの方法を使用して、OSS SDK for Java依存関係をプロジェクトに追加できます。

    • プロジェクトがEclipseにある場合は、依存関係をEclipseにインポートします。 詳細については、「インストール」をご参照ください。

    • プロジェクトがAntにある場合は、OSS SDK for Java依存関係をlibディレクトリに追加します。

    • を使用する場合。javacまたは。javaファイルで、-classpathまたは -cpコマンドを使用して、OSS SDK for Javaの依存関係へのパスを指定するか、依存関係をクラスパスパスに配置します。

接続タイムアウト

  • 原因

    次のようなレスポンスの場合、無効なエンドポイントまたは利用できないネットワークが原因で接続タイムアウトエラーが発生する可能性があります。

    com.aliyun.oss.ClientException: SocketException
        at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71)
        at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:116)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67)
        at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111)
        at com.aliyun.oss.internal.OSSBucketOperation.getBucketInfo(OSSBucketOperation.java:1152)
        at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1220)
        at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1214)
        com.aliyun.oss.de mo.HelloOSS.main(HelloOSS.java:94)
    原因: org.apache.http.conn.HttpHostConnectException: 接続t o oss-test.oss-cn-hangzhou-internal.aliyuncs.com:80 [失敗: 接続タイムアウト: 接続
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
        ... さらに9
                        
  • 解決策

    ossutilを使用して問題をトラブルシューティングします。

"SignatureDoesNotMatch" エラーメッセージが返された場合はどうすればよいですか?

  • 原因1

    AccessKeyシークレットがAccessKey IDと一致しません。

    AccessKey IDとAccessKeyシークレットの取得方法の詳細については、「AccessKeyペアの取得」をご参照ください。

  • 原因2

    署名付きURLが正しく使用されていません。 次のサンプルコードは、署名付きURLが誤って使用される方法の例を示しています。

    GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, object);
    request.setExpiration (新しい日付 (新しい日付 ().getTime() + 3600*1000));
    request.addUserMetadata("author");
    URL url = ossClient.generatePresignedUrl (リクエスト);
    
    Map<String, String> header = new HashMap<String, String>();
    header.put("著者");
    ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes())), -1, header); 

    Methodパラメーターが指定されていない場合、GETリクエストを開始するために署名付きURLが生成されます。 上記の例では、署名付きURLがPutObjectリクエストの開始に使用されているため、エラーが返されます。 この場合、MethodパラメーターをPUTに設定する必要があります。

    さらに、PutObjectリクエストのユーザーメタデータヘッダーは、x-oss-meta- プレフィックスで始まる必要があります。 上記の例では、ユーザーメタデータフィールドをx-oss-meta-authorに変更する必要があります。

    解決策:

    正しい方法を指定し、ヘッダーを変更します。 次のサンプルコードでは、Methodパラメーターを指定し、リクエストのヘッダーを変更する方法の例を示します。

    request.addUserMetadata("author");
    request.setMethod(HttpMethod.PUT);
    URL url = ossClient.generatePresignedUrl (リクエスト);
    
    Map<String, String> header = new HashMap<String, String>();
    header.put("x-oss-meta-" "著者");
    ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes())), -1, header); 
  • 原因3

    • 使用するJava用OSS SDKのバージョンが3.7.0より前であり、HttpClient 4.5.9以降がプロジェクトで使用されています。

    • アップロードされたオブジェクトの名前には + 文字が含まれます。これはHttpClient 4.5.9によってURLエンコードされておらず、クライアントとサーバーの間で署名の不一致が発生します。

    1

    解決策:

    • OSS SDK for Javaをバージョン3.11.1以降にアップグレードして、HttpClient 4.5.9との互換性を確保します。

    • 不要なHttpClientの依存関係を削除します。 OSS SDK for JavaはHttpClientを自動的にインポートします。 HttpClientがサードパーティのライブラリによってインポートされている場合は、JARパッケージの競合のソリューションを使用して競合を解決します。

  • 原因4

    HttpClient 4.5.10以降がプロジェクトにインポートされ、リクエストヘッダーにはISO/9959-1でサポートされていない文字が含まれています。 たとえば、名前がx-oss-meta- で始まるヘッダーには漢字が含まれています。3

    解決策

    • 競合するHttpClientバージョンを削除します。 詳細については、「JARパッケージの競合」をご参照ください。

    • リクエストヘッダーに含まれる文字がISO/9959-1でサポートされていることを確認してください。

「応答結果の解析に失敗しました」というエラーメッセージが返された場合はどうすればよいですか?

FAQ3

  • 原因

    HTTPリクエストは、クライアントにデプロイされたソフトウェアによって傍受されるか、インターネット上のルーターによってハイジャックされます。

    Java 11はインストールされていますが、JAXBの依存関係はpom.xmlファイルに追加されません。

  • 解決策

    HTTPSを使用してリクエストを開始します。

    必要なJAXB依存関係をpom.xmlファイルに追加します。 詳細については、「インストール」をご参照ください。

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

  • 原因

    OSS SDK for Javaを実行すると、同様の出力が表示されます。

    有効期限切れの接続が使用されている場合、上記エラーが発生します。 このエラーは、2.1.2より前のバージョンのOSS SDK for Javaが使用されている場合にのみ発生します。

  • 解決策

    OSS SDK for Javaを2.1.2以降にアップグレードします。

JVMに多数のorg.apache.http.impl.conn.PoolingHttpClientConnectionManagerインスタンスが含まれている場合はどうすればよいですか?

  • 原因

    OSSClientインスタンスはシャットダウンされません。

  • 解決策

    実行されるOSSClientインスタンスをシャットダウンするか、単一インスタンスモードを使用します。

OSS SDK for Javaが応答を停止した場合はどうすればよいですか?

  • 原因

    OSS SDK for Javaが呼び出されると、OSS SDK for Javaは応答を停止します。 jstack -l pidコマンドを実行して、スタックを表示します。

    "main" prio=6 tid=0x000000000291e000 nid=0xc40待機状態 [0x0000000002dae000]
    java.lang.Thread.State: WAITING (パーキング)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000007d85697f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
        at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138)
        at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306)
        at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64)
        at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192)
        at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185)
        at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123)
        at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68)
        at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:146)
        at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113)
        at com.aliyun.oss.internal.OSSObjectOperation.getObject(OSSObjectOperation.java:229)
        at com.aliyun.oss.OSSClient.getObject(OSSClient.java:629)
        at com.aliyun.oss.OSSClient.getObject(OSSClient.java:617)
        at samples.HelloOSS.main(HelloOSS.java:49)
                        

    このエラーは、接続プールでの接続リークが原因です。 使用後にossObjectがシャットダウンされない場合、これらのリークが発生する可能性があります。

  • 解決策

    プログラムをチェックして、接続リークが発生しないことを確認します。 次のサンプルコードは、ossObjectをシャットダウンする方法の例を示しています。

    // オブジェクトを読み取ります。
    OSSObject ossObject = ossClient.getObject(bucketName, objectName);
    // OSSで操作を実行します。
    // ossObjectをシャットダウンします。
    ossObject.close();
                        

接続の終了

  • 原因

    ossClient.getObjectを使用すると、次のような応答が返されます。

    スレッド "main" の例外org.apache.http.ConnectionClosedException: Content-Lengthで区切られたメッセージ本文の早期終了 (予定: 11990526; 受信: 202880)
        at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
        at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
        at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
        at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128)
        at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
        at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147)
        at java.io.FilterInputStream.close(FilterInputStream.java:181)
        at samples.HelloOSS.main(HelloOSS.java:39)
                        

    2回のデータ読み取りの間隔が1分を超えたためにエラーが発生します。 1分以上データが送受信されない場合、OSSは接続を閉じます。

  • 解決策

    不特定の期間にデータの一部を読み取る必要がある場合は、データの読み取り中に切断されないように、範囲ダウンロードを使用することを推奨します。 範囲ダウンロードタスクが完了すると、接続が閉じられます。 詳細については、「範囲ダウンロード」をご参照ください。

メモリリーク

  • 原因

    OSS SDK for Javaを長期間実行すると、メモリリークが発生します。 この期間は、アクセストラフィックの量に基づいて、数時間から数日の範囲である可能性があります。 メモリ使用量を分析するには、Eclipse Memory Analyzer (MAT) を使用することを推奨します。 詳細については、「ヒープダンプ分析にMATを使用」をご参照ください。

    同様の分析結果が表示される場合、PoolingHttpClientConnectionManagerは96% のメモリを消費します。 考えられる原因は、新しいOSSClientコマンドが複数回実行され、ossClient.shutdownが呼び出されないことです。 その結果、メモリリークが発生する。

  • 解決策

    新しいossClientコマンドの実行後、OSSClient. shutdownが呼び出されていることを確認します。

ossClient.shutdownが呼び出されたときに "InterruptedException" エラーが発生した場合はどうすればよいですか?

  • 原因

    V2.3.0より前のOSS SDK for Javaを使用してossClient.shutdownを呼び出すと、同様のエラーが表示されます。

    java.lang.InterruptedException: スリープ中断
            at java.lang.Thread.sleep(Native Method)
            at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper:76)
                        

    このエラーは、ossClientのバックエンドスレッド (IdleConnectionReaper) がアイドル接続を定期的に閉じるために発生します。 IdleConnectionReaperがスリープモードのときにossClient.shutdownが呼び出されると、上記のエラーが発生します。

  • 解決策

    エラーを無視するには、次のコードを使用します。

    try {
        ossClient.shutdown();
    } catch (例外e) {
    }
                        

「SDK.ServerUnreachable: 指定されたエンドポイントまたはuriが無効です」というエラーメッセージが返された場合はどうすればよいですか?

  • 原因

    • 要求は、高い同時実行性でクライアントからSecurity Token Service (STS) に送信されます。

    • サーバーへの接続がタイムアウトします。

    • STS SDKとSDKコアは最新バージョンではありません。

  • 解決策

    • クライアントまたはオンプレミスコンピューター上のElastic Compute Service (ECS) インスタンスがリクエストのバーストをサポートできない場合、STSに送信される同時リクエストの数を減らします。

    • サーバーへの接続がタイムアウトした場合は、キャプチャしたパケットを確認して分析します。

    • STS SDKまたはSDKコアを最新バージョンにアップグレードすることを推奨します。

NoSuchKey

  • 原因

    必要なオブジェクトが存在しない場合に返されるエラーメッセージ。

  • 解決策

    この問題を解決する方法については、「HTTPステータスコード404」をご参照ください。

SocketException

  • 原因

    初期化中にソケットの指定に失敗したためにエラーになります。 その結果、リクエストはOSSによって受信されませんでした。

  • 解決策

    次の側面からエラーのトラブルシューティングを行うことを推奨します。

    • ジッタが発生しないか確認します。

    • ソケットリソースが他のプロセスによって使い果たされていないか確認します。

    • OSS SDK for Javaで設定されている最大接続数を確認します。 実際の接続数が接続制限を超えると、ソケット例外が発生します。

    エラーが続く場合は、tcpdumpまたはWiresharkを使用してパケットをキャプチャし、エラーを再現し、パケットを分析することを推奨します。

OSS PostObjectのコールバック操作が失敗した場合はどうすればよいですか。

OSS PostObjectのコールバック操作は失敗しますが、PutObjectのコールバック操作は成功しています。 ほとんどの場合、JSON形式が無効であるか、コールバックが失敗した場合、エラーメッセージが返されます。 この場合、PUTとPOSTのコールバック操作がトリガーされるかどうかをテストする必要があります。

  • 原因

    コールバックパラメーターは、リクエストを送信するときにfileパラメーターに従います。

  • 解決策

    コールバックパラメーターの位置を変更します。

    テスト結果は、サーバーがリクエストをキャプチャしたことを示しています。

接続プールのシャットダウン

原因となる
: java.lang.IllegalStateException: 接続プールのシャットダウン
  org.apache.http.util.Asserts.check(Asserts.java:34)
  at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:184)
  at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:251)
  at org.apache.http.impl.execchain.MainClientExec.exe cute(MainClientExec.java:175)
  at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
  at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
  at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
  at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
  t com.aliyun.oss.common.com m.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:124)
  t com.aliyun.oss.common.com m.ServiceClient.sendRequestImpl(ServiceClient.java:133)
  ... 8もっと 
  • 原因

    ossClient.shutdown() が呼び出された後、リクエストはossClientを使用して送信されます。

  • 解決策

    呼び出しロジックを確認します。 ossClient.shutdown() が呼び出された後、ossClientを使用してリクエストが送信されないことを確認してください。

リクエストがOSS SDK for JavaのgeneratePresignedUrlを使用して生成されたときに「リクエストが期限切れです」というエラーメッセージが返された場合はどうすればよいですか?

  • 原因

    整数がオーバーフローすると、年2038のタイムスタンプの問題が発生します。

    アップロード要求は、URLの有効期限が切れた後に開始されます。

  • 解決策

    整数がオーバーフローする場合は、OSS SDK for JavaのURLの有効期限を2038年より前の値に設定することを推奨します。

    URLの有効期限の後にアップロード要求を開始する場合は、有効期限が要求を開始した時刻よりも遅くなるように、妥当な有効期限を設定することを推奨します。

「無効な応答」または「モジュールパスまたはクラスパスにJAXB-APIの実装が見つかりません」というエラーメッセージが返された場合はどうすればよいですか?

  • 原因

    Java 9以降がインストールされ、JAXBの依存関係は追加されません。

  • 解決策

    JAXBの依存関係を追加する方法の詳細については、「インストール」をご参照ください。

OSS SDK for Javaはスレッドの安全性を提供しますか?

はい、OSS SDK for Javaはスレッドの安全性を提供します。

AccessDenied Hierarchical namespace is disabled」エラーメッセージが返された場合はどうすればよいですか。

  • 原因

    階層的な名前空間機能は、CreateDirectoryRename、またはDeleteDirectory操作が呼び出される前に無効になっています。

  • 解決策

    バケットの作成時に、バケットの階層名前空間機能を有効にします。 詳細は、「バケットの作成」をご参照ください。

安定したクライアントネットワークでHTTP経由でOSSにアクセスしたときに「接続リセット」エラーメッセージが返された場合はどうすればよいですか?

特定のリージョンのオペレーターがOSSドメイン名を乗っ取る場合があります。 エンドポイントを指定するときにHTTPSを指定することを推奨します。 詳細については、「OSSClientインスタンスの設定」をご参照ください。

「Java 17 Cannot invoke」java.lang.reflect.Method.invoke(Object, Object[])"because" com.sun.xml.bind.v2.runtime.reflect.opt.Injector.de fineClass "is null" というエラーメッセージが返された場合はどうすればよいですか?

  • 原因

    JAXBはJava 9では廃止され、Java 11では削除されます。

  • 解決策

    次の依存関係を追加します。

    <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.messaging.saaj</groupId>
            <artifactId>saaj-impl</artifactId>
            <version>1.5.1</version>
        </dependency> 

OSS SDK for Javaの内部ログを設定する方法を教えてください。

OSS SDK for Javaは、Apache Commons Logging (JCL) を使用します。 JCLはさまざまなロギング実装フレームワークをサポートしており、そのうちの2つはJCL over Log4jとJCL over SLF4Jです。 詳細については、「設定」をご参照ください。

  • JCL over Log4j: Log4jの依存関係をインポートし、適切な設定を行います。 Log4j 2.xは、いくつかの実装フレームワークをサポートします。 デフォルトの実装フレームワークでは、Log4j2 APIとCoreを使用します。 詳細については、「APIの分離」をご参照ください。

  • JCL over SLF4J: jcl-over-slf4jとSLF4Jの依存関係をインポートし、適切な設定を行います。 SLF4Jは、slf4j-apiとlogback-classicの組み合わせなど、いくつかの実装フレームワークをサポートしています。 詳細については、「レガシーAPIのブリッジ」をご参照ください。

Apache Log4jは、OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、およびALLの異なるログレベルを定義します。

Log4jの属性を設定することで、OSS SDK for Javaのロギングを有効または無効にできます。

FAQ1

その他のエラー

OSSによって返されるその他のエラーを解決する方法の詳細については、「概要」をご参照ください。