Pregunta

Estoy escribiendo una aplicación de servidor Resteasy y estoy teniendo problemas para conseguir mis superclases a Mariscal. Tengo código de algo como esto:

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

Cuando el Mariscal de la clase Empleado a XML, me sale algo como esto:

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

sin salida del campo de nombre heredado de la clase Person.

¿Qué estoy haciendo mal?

Gracias, Ralph

¿Fue útil?

Solución

No estoy seguro de cómo se está configurando el contexto JAXB o marshaller pero el siguiente: -

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

}

da: -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <name>Ralph</name>
    <id>1</id>
</employee>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top