@XmlJavaTypeAdapter和包装器

时间:2010-12-10 19:35:59

标签: java annotations jaxb wrapper

我不想直接在我的代码中使用XmlAdapter类的XmlJavaTypeAdapter注释。 所以,我写了一些包装器:

class BinderWrapper<MODEL, BEAN> extends XmlAdapter<BEAN, MODEL>{
    private final Binder<MODEL, BEAN> target;
    private BinderWrapper(Binder<MODEL, BEAN> target){
        this.target = target;
    }
    static <MODEL, BEAN> BinderWrapper<MODEL, BEAN> createInstance(Binder<MODEL, BEAN> binder){
        return new BinderWrapper<MODEL, BEAN>(binder);
    }
    @Override
    public MODEL unmarshal(BEAN v) throws Exception {
        return target.unBean(v);
    }
    @Override
    public BEAN marshal(MODEL v) throws Exception {
        return target.toBean(v);
    }
}

这是我XmlAdapter的粘合剂。我的所有绑定器都将实现Binder接口

public interface Binder<MODEL, BEAN> {
    MODEL unBean(BEAN bean);
    BEAN toBean(MODEL model);
}

但是有一个问题。 @XmlJavaTypeAdapter需要XmlAdapter类而不包含任何包装器。我怎么能解决这个问题? - 使用其他注释/写一些配置/写一些魔术注释/ ..

感谢。

UPD

我的模型类不是 JavaBeans 。所以我想做一些两步映射:在bean中而不是在xml中。我也希望第一步注释。可能我不仅需要这个bean用于 JAXB 。真正的问题是:我可以使用一些非 JAXB 注释进行第一步吗?

1 个答案:

答案 0 :(得分:2)

  

我有没有的模型类   JavaBeans的。所以我想做两步   映射:在bean中,而不是在xml中。   我想用注释做第一步   太。可能我很需要这个豆子   不仅适用于JAXB。真正的问题   是:我可以用一些非第一步做   JAXB注释?

XmlAdapter提供您正在寻找的两步映射。如果您查看下面链接的示例 Map 是不是Java Bean的对象。 XmlAdapter所做的是将其转换为可以映射的Java Bean。

您可能会发现在类型级别而不是属性级别使用@XmlJavaTypeAdapter批注更容易。在类型级别使用时,您说每个引用该类的人都应该使用适配器而不是每个属性。有关类型级别示例,请参阅JAXB and Immutable Objects上的帖子。

有关详细信息,请参阅: