Si intenta reunir una clase que hace referencia a un tipo complejo que no tiene un constructor sin argumentos, tales como:¿Por qué JAXB necesita un constructor no arg para ordenar?
import java.sql.Date;
@XmlRootElement(name = "Foo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
int i;
Date d; //java.sql.Date does not have a no-arg constructor
}
con la aplicación JAXB que es parte de Java, de la siguiente manera:
Foo foo = new Foo();
JAXBContext jc = JAXBContext.newInstance(Foo.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(foo, baos);
JAXB arrojará un
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions java.sql.Date does not have a no-arg default constructor
Ahora, entiendo por qué JAXB necesita un constructor sin argumentos en unmarshalling - porque necesita crear una instancia del ob ject. Pero, ¿por qué JAXB necesita un constructor sin argumentos durante la clasificación?
Además, otra noción, ¿por qué la implementación JAXB de Java arroja una excepción si el campo es nulo, y de todos modos no se va a ordenar?
¿Me falta algo o son simplemente malas opciones de implementación en la implementación JAXB de Java?
Es en realidad una mala implementación en mi humilde opinión. JAXB debería haber hecho lo que Jackson hace y ofrecer una anotación de argumento constructor: http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html. Dicho esto, JAXB es mucho mejor que otros JSR. –