xml – xsd类型的JAXB(联合国)编组:xsd:base64Binary和xsd:he
JAXB将xsd:base64Binary和xsd:hexBinary类型映射到byte [].
鉴于我有一个架构/一个DOM元素代表这些类型中的每一个,例如: < FOO> ABCD< /富>对于xsd:hexBinary和 目前尚不清楚JAXB 2.1如何处理它. JAXB.unmarshal(新的DOMSource(node),byte [] .class)不喜欢有效负载. JAXBContext ctx = JAXBContext.newInstance(byte [] .class); 处理这些类型的正确方法是什么? 解决方法
byte []和hexBinary或base64Binary表示之间的转换是通过对应的XmlAdapter完成的.
默认情况下,JAXB使用包含的HexBinaryAdapter将byte []转换为String. 您可以使用自己的XmlAdpater轻松实现它: public final class Base64Adapter extends XmlAdapter<String,byte[]> { public byte[] unmarshal(String s) { if (s == null) return null; return org.apache.commons.codec.binary.Base64.decodeBase64(s); } public String marshal(byte[] bytes) { if (bytes == null) return null; return org.apache.commons.codec.binary.Base64.encodeBase64String(bytes); } } 您可以在字段/ getter_setter级别指定应由哪个适配器处理的内容: private class DataTestClass { @XmlJavaTypeAdapter(Base64Adapter.class) public byte[] base64Data = new byte[] { 0,1,2,3,4 }; @XmlJavaTypeAdapter(HexBinaryAdapter.class) public byte[] hexbinData = new byte[] { 0,4 }; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |