加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – xsd类型的JAXB(联合国)编组:xsd:base64Binary和xsd:he

发布时间:2020-12-16 23:34:36 所属栏目:百科 来源:网络整理
导读:JAXB将xsd:base64Binary和xsd:hexBinary类型映射到byte []. 鉴于我有一个架构/一个DOM元素代表这些类型中的每一个,例如: FOO ABCD /富对于xsd:hexBinary和 FOO YTM0NZomIzI2OTsmIzM0NTueYQ == /富对于xsd:base64Binary, 目前尚不清楚JAXB 2.1如何处理它
JAXB将xsd:base64Binary和xsd:hexBinary类型映射到byte [].

鉴于我有一个架构/一个DOM元素代表这些类型中的每一个,例如:

< FOO> ABCD< /富>对于xsd:hexBinary和
< FOO> YTM0NZomIzI2OTsmIzM0NTueYQ ==< /富>对于xsd:base64Binary,

目前尚不清楚JAXB 2.1如何处理它.

JAXB.unmarshal(新的DOMSource(node),byte [] .class)不喜欢有效负载.
以下都不是:

JAXBContext ctx = JAXBContext.newInstance(byte [] .class);
?ctx.createUnmarshaller()解组(节点).

处理这些类型的正确方法是什么?
提前致谢.

解决方法

byte []和hexBinary或base64Binary表示之间的转换是通过对应的XmlAdapter完成的.

默认情况下,JAXB使用包含的HexBinaryAdapter将byte []转换为String.
我不知道是否还有一个XmlAdapter从/转换为base64,但这没有问题:

您可以使用自己的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 };

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读