代码之家  ›  专栏  ›  技术社区  ›  Ralph java.is.for.desktop

jaxb编组超类

  •  2
  • Ralph java.is.for.desktop  · 技术社区  · 15 年前

    我正在编写一个resteasy服务器应用程序,并且很难让我的超类进行封送处理。我有这样的代码:

    @XmlAccessorType(XmlAccessType.NONE)
    @XmlRootElement(name = "person")
    class Person {
      protected String name;
    
      @XmlElement(name = "name")
      public String getName() { return name; }
    
      public void setName(String name) { this.name = name; }
    }
    
    @XmlAccessorType(XmlAccessType.NONE)
    @XmlRootElement(name = "employee")
    class Employee extends Person {
      protected Integer id;
    
      @XmlElement(name = "id")
      public Integer getId() { return id; }
    
      public void setId(Integer id) { this.id = id; }
    }
    

    当我将employee类封送到xml时,会得到如下结果:

    <employee>
      <id>12345</id>
    </employee>
    

    没有从person类继承的name字段的输出。

    我做错什么了?

    谢谢,拉尔夫

    1 回复  |  直到 15 年前
        1
  •  0
  •   Martin    15 年前

    我不确定您是如何配置jaxb上下文或marshaller的,但是:

    public static void main(String[] args) throws Exception
    {
    
            Employee employee = new Employee();
            employee.setId(1);
            employee.setName("Ralph");
    
            JAXBContext context = JAXBContext.newInstance(Employee.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(employee, System.out);
    
    }
    

    给出:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <employee>
        <name>Ralph</name>
        <id>1</id>
    </employee>