Tenemos una clase con una anotación JAXB en una propiedad. Luego tenemos varias subclases que anotan el resto de los datos importantes. Sin embargo, tenemos una subclase en la que queremos ignorar la anotación de la clase padre para que no se organice. Aquí hay un código de ejemplo.¿Cómo ignorar las propiedades anotadas de JAXB en una clase principal?
clase de Padres:
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
Ahora para la subclase:
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data1;
... setters/getters ...
}
Cuando masrhall una instancia de ConcreteClass me sale el siguiente XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
donde quiero XML como este:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Tenemos otras implementaciones de Solicitud, sin embargo, que requieren el UUID, este es solo un caso especial. ¿Hay alguna forma de ignorar el campo UUID en mi ConcreteRequest?
Lamentablemente, no creo que eso sea posible en mi situación. El campo UUID se conserva en nuestra base de datos por lo que anularlo sería peligroso. Básicamente, mi clase es una subclase especial en la que tiene un UUID pero no pertenece al esquema XML. – prozaak
De mi análisis, JAXB no proporciona una opción adecuada para su requerimiento, lo que sugeriría es utilizar el comportamiento de JAXB - "El elemento de valores nulos será ignorado cuando @XmlElement (nillable = false)". De modo que, en el momento de Marshalling, haga que el valor "uuid" explicite sea nulo, para que no construya la propiedad durante Marshalling. Tengo un ejemplo de código pero no pude compartirlo aquí. – omega
Esto simplemente no funciona. – GoalBased