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

Object Storage Service:よくある質問

最終更新日:Dec 15, 2023

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

JARパッケージの競合

  • 原因

    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)
                        

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

  • 解決策

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

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

    • 依存関係にある競合を削除します。 プロジェクトが複数のサードパーティパッケージに依存しており、パッケージが異なるバージョンのApache HttpClientに依存している場合、プロジェクトで依存関係が競合する可能性があります。 競合を解決するには、依存関係の除外を使用します。 詳しくは、「Maven ガイド」をご参照ください。

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

パッケージがありません

  • 原因

    OSS SDK for Javaを使用するときに同様の出力が表示される場合、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または。-classpathまたは -cpコマンドを実行して、java依存関係のOSS SDKが保存されているパスを指定するか、Java依存関係のOSS SDKをクラスパスに保存します。

接続タイムアウト

  • 原因

    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

    • OSS SDK for Javaのバージョンが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 4.5.10以降をプロジェクトから削除します。 詳細については、このトピックの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) を使用することを推奨します。 詳細については、「IBM Developer」をご参照ください。

    同様の分析結果が表示される場合、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のロギングを有効または無効にするにはどうすればよいですか。

Apache Log4jは、OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALLなど、さまざまなレベルのログを指定します。

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

FAQ1

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

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

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

  • 原因

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

  • 解決策

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

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

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

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