erança @JAXB, desenfreada da subclasse da classe empacotada
Estou usando o JAXB para ler e escrever XML. O que eu quero é usar uma classe JAXB base para marshalling e uma classe JAXB herdada para desserialização. Isso permite que um aplicativo Java remetente envie XML para outro aplicativo Java receptor. O remetente e o destinatário compartilharão uma biblioteca JAXB comum. Eu quero que o receptor desmarque o XML em uma classe JAXB específica do receptor que estenda a classe JAXB genéric
Exemplo
Esta é a classe JAXB comum usada pelo remetent
@XmlRootElement(name="person")
public class Person {
public String name;
public int age;
}
Esta é a classe JAXB específica do receptor usada ao desarmar o XML. A classe do receptor possui lógica específica para o aplicativo recepto
@XmlRootElement(name="person")
public class ReceiverPerson extends Person {
public doReceiverSpecificStuff() ...
}
Marshalling funciona como esperado. O problema está no cancelamento da matrícula, ainda assim, o cancelamento paraPerson
apesar do JAXBContext usar o nome do pacote da subclasseReceiverPerson
.
JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson);
O que eu quero é desassociarReceiverPerson
. A única maneira de fazer isso é remover@XmlRootElement
a partir dePerson
. Infelizmente, isso impedePerson
de ser empacotado. É como se o JAXB iniciasse na classe base e descesse até encontrar o primeiro@XmlRootElement
com o nome apropriado. Eu tentei adicionar umcreatePerson()
método que retornaReceiverPerson
paraObjectFactory
mas isso não ajuda.