/ / alternatywa dla @XmlSeeAlso - java, jaxb

alternatywa dla @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");

}

}

aby JAXB wiedział, że klasa B jest podklasą klasy A, musiałbym umieścić @XmlSeeAlso (wartość = {B.class}) w klasie A. Mamy około 50 podklas A.

Ale zależność projektu jest taka, że ​​klasa A leży w pakiecie, który nie ma dostępu do klasy B. Nie mogę więc umieścić adnotacji w klasie A.

jakie mogą być alternatywy, aby JAXB mógł serializować podklasy klasy A?

Odpowiedzi:

3 dla odpowiedzi № 1

The @XmlSeeAlso adnotacja nie jest wymagana podczas mapowania relacji dziedziczenia, ale wtedy jest najczęściej używana. Rola @XmlSeeAlso jest powiedzenie JAXB, aby wciągało i produkowało metadane dla klas, których nie można wywnioskować z przechodzenia przez klasę.

W twoim przykładzie, jeśli stworzyłeś JAXBContext po prostu C klasa (JAXBContext.newInstance(C.class)) a później A klasa będzie również przetwarzana z powodu tobeserialized pole, ale B nie byłoby t, ponieważ w Javie nie ma mechanizmu do wyszukiwania podklas. Możesz rozwiązać ten problem przez wprowadzenie @XmlSeeAlso(B.class) na A lub przez włączenie podklas w klasach używanych do ładowania początkowego JAXBContext:

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

0 dla odpowiedzi nr 2

Minęło wiele czasu, ale możesz spróbować dodać @XmlTransient w klasie A i @XmlType w klasie B.

Lub @XmlTransient w klasach A i B (ponieważ „są abstrakcyjne”) i dodać @XmlType do konkretnych podklas.