Замена sun.misc.Base64 на javax.xml.bind.Преобразователь типов данных

#java #java-6

Вопрос:

Я работаю с проектом, в котором пару раз используется sun.misc.base64encoder и декодер, но пакет больше не работал, когда я пытался взять его на себя. Поэтому я пытаюсь использовать javax.xml.bind.Вместо этого класс DataTypeConverter. Я использую Java 6, поэтому я не могу использовать util.Base64, это лучшая альтернатива, насколько мне известно.

К счастью, он использует пакеты sun.misc всего пару раз за всю программу, так что изменения шли гладко, пока я не столкнулся со следующим…

 try {
            byte[] utf8 = textToEncrypt.getBytes("UTF8");
            byte[] enc = encryptionCypher.doFinal(utf8);
            return new sun.misc.BASE64Encoder().encode(enc);

        } catch (javax.crypto.BadPaddingException e) {
            throw new EncryptException(e.toString(), e);
        } catch (IllegalBlockSizeException e) {
            throw new EncryptException(e.toString(), e);
        } catch (UnsupportedEncodingException e) {
            throw new EncryptException(e.toString(), e);
        }
 

я стараюсь, чтобы он был как можно более похож на исходный код, чтобы избежать каких-либо серьезных сбоев в дальнейшем. Итак, вот на что я попытался его изменить.

 try {
            byte[] utf8 = textToEncrypt.getBytes("UTF8");
            byte[] enc = encryptionCypher.doFinal(utf8);
            //return new sun.misc.BASE64Encoder().encode(enc);
            return new DatatypeConverter.printBase64Binary(enc);

        } catch (javax.crypto.BadPaddingException e) {
            throw new EncryptException(e.toString(), e);
        } catch (IllegalBlockSizeException e) {
            throw new EncryptException(e.toString(), e);
        } catch (UnsupportedEncodingException e) {
            throw new EncryptException(e.toString(), e);
        }
 

Однако, когда я попытался это сделать, он рассматривал printBase64Primary как класс и не позволял мне запускать функцию так, как я намеревался. Я хотел бы знать, есть ли какие-либо способы исправить это или есть ли более подходящие альтернативы. Я имею в виду, что моей первой идеей было бы просто избавиться от «нового», но я беспокоюсь, что есть причина, по которой оно там есть. Кроме того, я не хочу использовать какие-либо другие версии java, если смогу этого избежать, так как это такая небольшая часть программы.

Я также должен упомянуть, что я использую Apache Netbeans, если это поможет.

Комментарии:

1. printBase64Binary это не static метод, поэтому вам нужен экземпляр DatatypeConverter . Теперь ваш new звонок неправильный, так как вы пропускаете () , поэтому он должен гласить new DatatypeConverter().printBase64Binary(ene) ;

2. @M. Deinum Я пробовал это, но там говорится, что у преобразователя типов данных были личные привилегии

3. Все DatatypeConverter методы статичны, просто удалите new ключевое слово. Кстати, поскольку JAXB был удален из Java SE 9, вам следует создать свой собственный метод преобразования в/из Base64: при обновлении до более поздней версии Java вам просто нужно будет изменить один метод.

4. Хмм. Странно, что я, должно быть, смотрел на что-то другое. Это действительно static так, и поэтому вам нужно удалить new часть, чтобы правильно вызвать метод.