2010-12-10 71 views
2

我不想在代码中直接使用XmlJavaTypeAdapter批注与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); 
    } 
} 

这是我的wrappes粘合剂 - 例如XmlAdapter秒。我所有的粘合剂将实现Binder接口

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

但是有一个问题。 @XmlJavaTypeAdapter需要XmlAdapter类没有任何包装。我如何解决这个问题? - 使用其他注释/写一些配置/写一些神奇的注释/ ..

谢谢。

UPD

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

+0

为什么你不希望直接使用@XmlJavaTypeAdapter注释?我不确定你的方法会带来什么。 – 2010-12-10 19:53:20

+0

@Blaise Doughan,嗯..我想它会乱丢我的代码。 – 2010-12-10 20:00:49

+0

@Blaise Doughan,问题已更新。 – 2010-12-10 20:09:57

回答

2

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

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

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

欲了解更多信息,请参阅:

+0

好的。我想,我会帮忙的。明天我会尝试实施它。 – 2010-12-10 20:47:53