2017-12-19

Encoding/Decoding in Java 9 using javax.xml.bind or not

DatatypeConverter and Java 9

If you used to do conversions, like

import javax.xml.bind.DatatypeConverter;
...

byte[] bin = DatatypeConverter.parseHexBinary("0769cc");


With Java 9 you will get errors, since javax.xml.bind is no longer in the module path, it is considered part of Java Enterprise. With Java 10 it may even be removed from the JRE.

It is a known problem:

There are many solutions: Rewriting the function or Using command line option to load the library at runtime ...  But the most robust and long term one seems to be adding the dependency to your project.

Here I will focus on adding the dependency:

Java Enterprise library 

As a Maven dependency:
<dependency>
     <groupId>javax.xml.bind</groupId>
     <artifactId>jaxb-api</artifactId>
     <version>2.3.0</version>
</dependency>

Directly in IntelliJ (Community edition):


Guava

Guava also provides conversion methods, but you will have to adapt your code:
https://github.com/google/guava/wiki/PrimitivesExplained#byte-conversion-methods

Apache Common

Same for Apache Commons. It is a matter of taste.
http://commons.apache.org/proper/commons-codec/

org.apache.commons.codec.binary.Hex(str.toCharArray())



Post a Comment

Fedora Special Interest Groups (SIGs) Audio Creation / Music

Hoping to revive the Fedora Audio Creation SIG. (or at least to update/delete a few Wiki pages) The prominent figure in "Fedora Audi...