Пакет com.солнце.орг."Апач".в формате XML.внутренние.безопасности.а utils.В base64 не существует

Я использую NetBeans 7.0.1 и JDK 1.6 Update 24 и при импорте пакета com.sun.org.apache.xml.internal.security.utils.Base64 для кодирования хэша пароля:

u.setPassword(Base64.encode(digest(password)));

при компиляции, я получаю следующую ошибку:

(omitted)RegistrationController.java:8: package com.sun.org.apache.xml.internal.security.utils does not exist
import com.sun.org.apache.xml.internal.security.utils.Base64;

(omitted)RegistrationController.java:94: cannot find symbol
symbol  : variable Base64
location: class RegistrationController
    u.setPassword(Base64.encode(digest(password)));
2 errors

Я прочитал несколько других вопросов, касающихся той же проблемы, но все дело с пакетами, которые не являются частью JDK, тогда как это (rt.jar). Code Assists работает над типом, и расширение jar показывает, что исходный код и двоичный файл фактически присутствуют как что ж.

Я попытался очистить проект, перестроить его, скопировать исходные файлы в новый корпоративный проект и запустить NetBeans в качестве администратора, все безрезультатно. Любая подсказка о том, как это решить, очень ценится!

спасибо!

3 ответов


As Грег указал в комментарии к ранее принятый ответ:

Примечание из будущего: в Java 8 есть java.util.Base64 пакета.

поскольку он теперь реализован как часть стандартного API Java, вероятно, предпочтительнее использовать его вместо кодека Apache Commons. Имея это в виду, я думаю, что это должно быть опубликовано в качестве ответа.

API имеет несколько методов в классе Base64 создать Decoder или Encoder. Поддерживаются следующие типы кодеров и декодеров:

  • Basic - использует "алфавит Base64", как указано в Таблице 1 RFC 4648 и RFC 2045 для операции кодирования и декодирования. Кодировщик не добавляет никакого символа подачи строки (разделителя строк). Декодер отклоняет данные, содержащие символы за пределами base64 алфавит.

  • URL и имя файла safe - использует "URL и имя файла safe Base64 алфавит", как указано в таблице 2 RFC 4648 для кодирования и декодирования. Кодировщик не добавляет никакого символа подачи строки (разделителя строк). Декодер отклоняет данные, содержащие символы вне алфавита base64.

  • МИМ - использует "алфавит Base64", как указано в Таблице 1 RFC 2045 для кодирования и декодирования операция. Закодированные выходные данные должны быть представлены в строках не более 76 символов каждый и использует возврат каретки "\r", за которым немедленно следует строка "\n " в качестве разделителя строк. В конец закодированного вывода не добавляется разделитель строк. Все разделители строк или другие символы, не найденные в таблице алфавита base64, игнорируются в операции декодирования.

так, например, это как создать базовый кодировщик и перекодировать byte массив:

byte[] encodedArray = Base64.getEncoder().encode(someArrayToEncode);

com.солнце.* классы не являются частью API Java, и вы не должны полагаться на них. Я бы предложил использовать Кодек Apache Commons вместо этого сделать кодировку Base64.


С org.apache.commons.codec.binary.Base64 используйте конкретный метод (например,Base64.encodeBase64String() например) заменить Base64.encode