Если вы попытаетесь маршалировать класс, который ссылается на сложный тип, у которого нет конструктора no-arg, например:
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
}
с реализацией JAXB, которая является частью Java, выглядит следующим образом:
Foo foo = new Foo();
JAXBContext jc = JAXBContext.newInstance(Foo.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(foo, baos);
JAXB выкинет
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions java.sql.Date does not have a no-arg default constructor
Теперь я понимаю, почему JAXB нужен конструктор no-arg для unmarshalling - потому что ему нужно создать экземпляр объекта. Но почему JAXB нужен конструктор no-arg при сортировке?
Кроме того, еще один nit, почему реализация Java JAXB генерирует исключение, если поле имеет значение NULL и в любом случае не собирается сортироваться?
Я что-то упустил или это просто неправильные варианты реализации в реализации Java JAXB?