/ / alternatíva k @XmlSeeAlso - java, jaxb

alternatívu k @XmlSeeAlso - java, jaxb

abstract Class A{

}


Class B extends A{

}


@XmlRootElement
Class C {
@XmlElement(name = "tobeserialized")
A tobeserialized;
}


Class D{
public void marshal(){
C all = getData();
JAXB.marshal(all, new File("saved.xml");

}

}

pre JAXB vedieť, že trieda B je podtrieda triedy A, musela by som vložiť @XmlSeeAlso (value = {B.class}) do triedy A. Máme okolo 50 podtried A.

Ale závislosť projektu je taká, že trieda A leží v balíku, ktorý nemá prístup k triede B. Takže nemôžem dať anotáciu do triedy A.

čo môžu byť alternatívy, na ktoré sa môžete pozrieť, takže JAXB môže serializovať podtriedy triedy A?

odpovede:

3 pre odpoveď č. 1

Na @XmlSeeAlso anotácia nie je potrebná pri mapovaní dedičského vzťahu, ale je to vtedy, keď sa používa najčastejšie. @XmlSeeAlso je povedať JAXB, aby vytiahol a vyrobil metaúdaje pre triedy, ktoré nemôžu byť odvodené z prechodu triedy.

Vo vašom príklade, ak ste vytvorili JAXBContext len na C trieda (JAXBContext.newInstance(C.class)) potom A trieda by bola spracovaná aj kvôli tobeserialized oblasti, ale B wouldn "t, pretože tam nie je" mechanizmus v jazyku Java nájsť podtriedy. Dalo by sa to vyriešiť uvedením @XmlSeeAlso(B.class) na A alebo zahrnutím podtried do tried používaných na bootstrap JAXBContext:

JAXBContext.newInstance(B.class, C.class);

0 pre odpoveď č. 2

Bol to pre mňa dlhý čas, ale môžete sa pokúsiť pridať @XmlTransient pre triedu A a @XmlType v triede B.

alebo @XmlTransient na triedach A a B (pretože sú abstraktné) a pridávajú sa @XmlType na konkrétne podtriedy.