我盯着这个简短的代码太久了,我一生都看不到它如何在第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

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

我不完全确定您是否遇到了同样的问题,但是也许尝试将JDK6与最新的JAXB版本一起使用,看看是否发生了相同的NPE。

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

10-10 08:09