2016-03-23 2 views
0

я с XML, которые выглядят какКак получить ссылку на базовый класс в Java от класса Child элемента в XML

<Record> 
    <Student> 
    <name>sumit</name> 
    <rollno>123</rollno> 
    <Student> 
<Record> 

и модели классов выглядит

class Record{ 
    @JsonProperty("person") 
    private Person person; 
    public String getPerson(){ 
     return person; 
    } 
    public void setPerson(String person){ 
     this.person=person; 
    } 
} 

abstract class Person{ 
    @JsonProperty("name") 
    private String name; 
    public String getName(){ 
     return name; 
    } 
    public void setName(String name){ 
     this.name=name; 
    } 
} 

@JsonTypeName("Student") 
class Student extends Person{ 
    @JsonProperty("rollno") 
    private String rollno; 
    public String getrollno(){ 
     return rollno; 
    } 
    public void setName(String rollno){ 
     this.rollno=rollno; 
    } 
} 

Сейчас в моем приложении я нахожусь создание объекта из XML, как показано ниже

InputStream inputStream = new FileInputStream("/home/sumit/abc.xml"); 
JAXBContext jaxbContext = JAXBContext.newInstance(Record.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Record data = (Record) jaxbUnmarshaller.unmarshal(inputStream); 

Но я получаю null в data.getPerson();

Может ли кто-нибудь помочь мне, что я делаю неправильно.

ответ

0

Это не будет работать так, как вы этого хотите. Элементы XML идентифицируются по именам тегов, а имена тегов должны соответствовать именам полей в классе Java. Как только <Record> был установлен как значение класса Record, <Student> не имеет аналогов в поле этого класса, и JAXB не может отменить его.

Вы должны быть в состоянии распаковать 8after изменения <Student> к <student>) с этого модифицированного класса:

class Record{ 
    private Student student; 
    public Student getStudent(){ 
     return student; 
    } 
    public void setStudent(Student value){ 
     student = value; 
    } 
} 

(Обратите внимание, что есть еще одна проблема, из-за несоответствия типа String, против Человека для человека поля в классе Запись.)