java - 为什么NPE使用DatatypeConverter的静态方法?

标签 java string nullpointerexception base64 type-conversion

我盯着这段短代码看得太久了,我一辈子都看不出它怎么会在第 6 行抛出一个 NullPointerException。为什么是 NPE?

class ConvertTest {

    public static void main(String[] args) throws Exception {
        byte[] b = "Ha".getBytes("UTF-8");
        System.out.println("bytes: " + b.length);
        javax.xml.bind.DatatypeConverter.printBase64Binary(b);  // NPE!
    }
}

输出

bytes: 2
Exception in thread "main" java.lang.NullPointerException
        at javax.xml.bind.DatatypeConverter.printBase64Binary(DatatypeConverter.java:547)
        at ConvertTest.main(ConvertTest.java:6)
Press any key to continue . . .

更新

虽然许多错误报告都指向 1.7 变体,但我惊讶地发现 Eclipse 配置为使用 1.6.0_32 并且 TextPad 找到了 1.6.0 版本-b105(甚至没有意识到它已安装!)。

两个 JRE 都因该 NPE 而失败。

最佳答案

现在 JDK7 中的 JAXB 似乎存在错误,Camel 上的这个问题证明了这一点:

https://issues.apache.org/jira/browse/CAMEL-4893

最终链接到这个问题 https://github.com/javaee/jaxb-v2/issues/860在 java.net 上的 JAXB 项目中。

我不完全确定您是否遇到了同样的事情,但或许可以尝试使用 JDK6 和最新的 JAXB 版本,看看是否会发生相同的 NPE。

关于java - 为什么NPE使用DatatypeConverter的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12498256/

相关文章:

python - 解释字符串模式中使用反斜杠的 perl split

java - 声明 Java 对象数组的数组时遇到问题

java - 在数组中查找最小值和最大值的更快方法

java - 在 Java 中如何将字符串转换为输入流?

java - 在 wicket 框架中刷新 AjaxButton 的 onSubmit 内的整个表单

javascript - 使用 splice 方法时如何保留先前的数组

java - 代码不断抛出NP,找不到原因

java - Spring 2.5.6 JMX NotificationPublisher 调用抛出 NPE

JavaFX 8 媒体播放器进度 slider

java - 对动态 URL 应用过滤器