JAXB maps both xsd:base64Binary
and xsd:hexBinary
types to byte[]
.
Given that I have a schema/a DOM Element representing each of these types such as:
<foo>ABCD</foo>
for xsd:hexBinary and
<foo>YTM0NZomIzI2OTsmIzM0NTueYQ==</foo>
for xsd:base64Binary ,
it's not clear how JAXB 2.1 handles it.
JAXB.unmarshal(new DOMSource(node), byte[].class)
does not like the payload.
Neither does the following:
JAXBContext ctx = JAXBContext.newInstance(byte[].class);
ctx.createUnmarshaller().unmarshal(node);
What's the correct way of handling these types? Thanks in advance.
The conversion between byte[] and the hexBinary or base64Binary representation is done via a correspondent XmlAdapter.
by default JAXB uses the included HexBinaryAdapter for converting byte[] to a String. I don't know if there is also an XmlAdapter which converts from/to base64 but that is no problem:
You can easily implement it yourself using an own XmlAdpater:
You can specify on a field/getter_setter level what should be processed by which adapter: