如何从XML中的Child类元素获取java中的Base类引用

时间:2016-03-23 08:04:11

标签: java json xml jaxb unmarshalling

我的XML看起来像

func

和模型类看起来像

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

现在在我的应用程序中,我正在使用XML创建对象,如下所示

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

但我在data.getPerson();

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

任何人都可以帮助我解决我的错误。

1 个答案:

答案 0 :(得分:0)

这不会按照你想要的方式运作。 XML元素由标记名称标识,标记名称需要与Java类中的字段名称相对应。将<Record>建立为类Record的值后,<Student>在该类的字段中没有对应项,并且JAXB无法解组此内容。

您应该能够在使用此修改后的类更改<Student><student>之后解组8:

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

(请注意,由于类Record中的person字段的类型不匹配,因此存在另一个问题。)