Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why the NPE using static method of DatatypeConverter?

I have stared at this short code too long, and cannot for the life of me see how it can throw a NullPointerException on line 6. Why the 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!
    }
}

Output

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 . . .

Update

While many of the bug reports are pointing to a 1.7 variant, I was astonished to see that Eclipse is configured to use 1.6.0_32 & TextPad has found a version of 1.6.0-b105 (didn't even realize that was installed!).

Both JREs fail with that NPE.

like image 527
Andrew Thompson Avatar asked Sep 19 '12 15:09

Andrew Thompson


2 Answers

It seems as though there are bugs in JAXB within JDK7 right now, as evidenced by this issue on Camel:

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

which ultimately links to this issue https://github.com/javaee/jaxb-v2/issues/860 in the JAXB project on java.net.

I'm not entirely sure if you are running into this same thing or not, but perhaps try using JDK6 with the latest JAXB version there and see if the same NPE happens or not.

like image 161
whaley Avatar answered Nov 03 '22 06:11

whaley


Without the specifics of the environment I cannot be certain this is the case but if you are using JAXB RI then it's possible that you are running into the issue described by this JAXB bug: http://java.net/jira/browse/JAXB-761.

While the bug doesn't specifically address the issue you were having (it is related to the parseDate method), the root cause may be the same. It was detected in version 2.2.1 of JAXB but may have been there beforehand in 2.1.x versions, and JAXB 2.1.1 appears to be the most recent release integrated into 1.6 (integrated in 1.6u14).

The issue states that it was resolved with JAXB 2.2.4, which was integrated into 1.7.

Additional note - a related issue was documented regarding a NPE for parseBoolean when attempting to use with 1.6u31 which may be of interest (though little help, the description is very short): http://java.net/jira/browse/JAXB-902. This suggest this could still be an ongoing issue depending on if you are using RI or another JAXB implementation.

like image 21
Bionic_Geek Avatar answered Nov 03 '22 08:11

Bionic_Geek