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

And*_*son 10 java string base64 type-conversion nullpointerexception

我已经盯着这个短代码太久了,并且不能为我的生活看到它怎么能在线投入NullPointerException6.为什么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!
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

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 . . .
Run Code Online (Sandbox Code Playgroud)

更新

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

两个JRE都因NPE而失败.

wha*_*ley 3

现在 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。