包com.sun.org.apache.xml.internal.security.utils.Base64不存在

时间:2011-08-18 17:30:07

标签: java netbeans

我正在使用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)。代码辅助工作在类型上,扩展jar显示源代码和二进制文件实际上也存在。

我尝试清理项目,重建项目,将源文件复制到一个全新的Enterprise项目并以管理员身份运行NetBeans,但都无济于事。关于如何解决这个问题的任何线索非常感谢!

谢谢!

3 个答案:

答案 0 :(得分:23)

com.sun。*类不是Java API的一部分,您不应该依赖它们。我建议使用Apache Commons Codec代替Base64编码。

答案 1 :(得分:4)

Greg在对previously accepted answer的评论中指出:

  

从未来开始注意:在Java 8中,有一个print([int(t <= 22) for t in temperature]) 包。

由于它现在作为标准Java API的一部分实现,因此最好使用它而不是Apache Commons Codec。考虑到这一点,我认为这应该作为答案发布。

API在课程Base64中有许多方法可以创建DecoderEncoder。支持以下类型的编码器和解码器:

  • 基本 - 使用RFC 4648和RFC 2045的表1中指定的“Base64 Alphabet”进行编码和解码操作。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含base64字母表之外的字符的数据。

  • URL和文件名安全 - 使用RFC 4648表2中指定的“URL和文件名安全Base64字母”进行编码和解码。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含base64字母表之外的字符的数据。

  • MIME - 使用RFC 2045表1中指定的“Base64 Alphabet”进行编码和解码操作。编码输出必须以不超过76个字符的行表示,并使用回车符'\ r',后面紧跟一个换行符'\ n'作为行分隔符。没有行分隔符添加到编码输出的末尾。在解码操作中,将忽略base64字母表中未找到的所有行分隔符或其他字符。

因此,例如,这是如何创建基本编码器并编码java.util.Base64数组:

byte

答案 2 :(得分:2)

使用org.apache.commons.codec.binary.Base64使用特定方法(例如Base64.encodeBase64String())来替换Base64.encode