Создание предупреждений относительно использования проприетарного API Sun
Я пытаюсь очистить свою среду сборки и обнаружил пару предупреждений об использовании проприетарных API Sun.
[javac] /workspace/<path-to-files>/Handler.java:18: warning: sun.net.www.protocol.http.Handler is Sun proprietary API and may be removed in a future release
[javac] public class Handler extends sun.net.www.protocol.http.Handler {
[javac] ^
[javac] /workspace/<path-to-files>/HttpClient.java:16: warning: sun.net.www.http.HttpClient is Sun proprietary API and may be removed in a future release
[javac] public class HttpClient extends sun.net.www.http.HttpClient {
[javac]
[javac] /workspace/<path-to-files>/HttpURLConnection.java:19: warning: sun.net.www.protocol.http.HttpURLConnection is Sun proprietary API and may be removed in a future release
[javac] public class HttpURLConnection extends sun.net.www.protocol.http.HttpURLConnection {
[javac] ^
а также...
[javac] /workspace/<path-to-files>/JavaFile.java:17: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release
[javac] import sun.misc.BASE64Decoder;
[javac] ^
[javac] /workspace/<path-to-files>/JavaFile.java:338: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
[javac] BASE64Encoder encoder = new BASE64Encoder();
[javac] ^
Кто-нибудь может предложить хорошую альтернативу этим API? Или их можно заменить официальными API Java? Я понимаю, что это всего лишь предупреждения, но это то, что я планирую решить.
4 ответа
Непонятно, почему вы декларируете свое HttpURLConnection
а также Handler
классы в первую очередь - вы уверены, что хотите их скомпилировать?
Что касается Base64 - мне нравится эта реализация общественного достояния.
Если вы написали http-клиент, то вы заново изобрели колесо. Это действительно хороший пример уже в http-клиенте Apache.
Если вам нужна кодировка / декодирование Base64, для этого есть кодек в Apache Commons Codec.
Для Base64, начиная с Java 8 вы можете использовать java.util.Base64.getEncoder().encode(Byte[])
а также java.util.Base64.getDecoder().decode(Byte[])
Я не уверен, почему вы должны использовать эти sun.net.www.protocol.http
объекты непосредственно в вашем коде, так как они используются внутри HttpUrlConnection
, Вы можете использовать этот объект вместо внутренних. Если этот API не отвечает вашим потребностям, есть Apache HttpClient.
Что касается кодировки base 64, вы можете использовать кодировку, поставляемую с Java Mail, вот так:
final InputStream decoded = MimeUtility.decode(encodedInput, "base64");
или Apache Commons-Codec.