2010-12-10 5 views
2

Ich möchte nicht XmlJavaTypeAdapter Annotationen mit XmlAdapter-Klasse in meinem Code direkt verwenden. Also schrieb ich einige Wrapper:@ XmlJavaTypeAdapter und wrappers

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); 
    } 
} 

das ist wrappes meine Bindemittel wie XmlAdapter s. Alle meine Bindemittel wird implementiert Binder Schnittstelle

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

Aber es gibt ein Problem. @XmlJavaTypeAdapter erfordern XmlAdapter-Klasse ohne Wrapper. Wie kann ich dieses Problem lösen? - Verwenden Sie andere Annotation/Schreiben Sie einige Config/schreiben Sie einige magische Annotation/..

Vielen Dank.

upd

I Modellklassen, die nicht Java Beans sind. Also möchte ich ein zweistufiges Mapping machen: in Beans und dann in xml. Ich möchte auch den ersten Schritt mit Anmerkungen machen. Wahrscheinlich brauche ich diese Bohnen nicht nur für JAXB. Die wirkliche Frage ist: kann ich ersten Schritt mit einigen nicht JAXB Anmerkungen tun?

+0

Warum Sie direkt die @XmlJavaTypeAdapter Annotation nicht verwenden? Ich bin nicht sicher, was Sie mit Ihrem Ansatz gewinnen. –

+0

@Blaise Doughan, Hm .. Ich denke, es wird mein Code übersät sein. –

+0

@Blaise Doughan, Frage aktualisiert. –

Antwort

2

Ich habe Modellklassen, die nicht JavaBeans sind. Also ich möchte zwei zwei Schritte machen Mapping: in Bohnen und dann in XML. Ich möchte ersten Schritt mit Anmerkungen auch tun. Wahrscheinlich brauche ich diese Bohnen nicht nur für JAXB. Die echte Frage ist: kann ich ersten Schritt mit einigen nicht JAXB Anmerkungen machen?

Der XmlAdapter bietet das von Ihnen gewünschte Zweischritt-Mapping. Wenn Sie sich das unten verlinkte Beispiel ansehen: Karte ist das Objekt, das kein Java Bean ist. Was der XmlAdapter tut, konvertiert ihn in eine Java Bean, die gemappt werden kann.

Es kann einfacher sein, die @ XmlJavaTypeAdapter-Annotation auf Typ- und nicht auf Eigenschaftsebene zu verwenden. Wenn Sie auf der Typenebene verwendet werden, sagen Sie, dass jeder, der auf diese Klasse verweist, den Adapter statt pro Eigenschaft verwenden soll. Sehen Sie meinen Beitrag auf JAXB and Immutable Objects für eine Typenebene Beispiel.

Weitere Informationen finden Sie unter:

+0

Ok. Ich denke, ich werde helfen. Morgen werde ich versuchen, es umzusetzen. –

Verwandte Themen