1. ホーム
  2. Java

アクセス制限です。タイプ 'BASE64Decoder' は API ではない (必要なライブラリ xxx の制限)

2022-02-08 02:22:34

アクセス制限です。タイプ 'BASE64Decoder' は API ではない (必要なライブラリ xxx の制限)


誰かが遭遇したかもしれないのは、次のようなエラーです。

あるいは、ヒントかもしれません


を使用することで 

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

すると、こんな問題が発生します。

問題の原因

参考:https://stackoverflow.com/questions/44268690/access-restriction-the-type-base64decoder-is-not-api

すべてsunです。* および com.sun. * パッケージは、Java の実装では非公開です。将来のバージョンの Java では、パッケージが変更され、それに依存するアプリケーションコードが破壊される可能性があります。対照的に、java.*、javax.*、javafx.* パッケージのすべてのクラスは、定型化されています。それらの名前とパブリックメンバーは変更されず、削除されることもありません(理論的には、非推奨のものを除いては)。このため、これらのクラスはパブリックAPIの一部ではないことを示すメッセージが表示されます。これらのクラスは一般に公開するのには適していません。Java 8 からは java.util.Base64 を使うべきです。しかし、Java 7 を使っているように見えるので、DatatypeConverter.parseBase64Binary と DatatypeConverter.printBase64Binary を使う必要があります。 should also 2017年7月にリリース予定の Java 9 ではプログラムが sun.* コースへアクセスできないことについて言及します。https://mreinhold.org/blog/jigsaw-module-system をご覧ください。

回避策

に変更します。  java.util.Base64など。

String hash = new String(Base64.getEncoder().encode(raw));
return new String(Base64.getEncoder().encode(rawString.getBytes(charsetName))); 
return new String(Base64.getDecoder().decode(encrypted.getBytes(charsetName)));