Элементы, подлежащие маршалированию, должны быть общедоступными или иметь аннотацию XMLElement. Класс ArrayList и ваши классы Books не соответствуют ни одному из этих правил.
Вы должны определить метод для предложения значений Book и аннотировать его.
В вашем коде, изменив только свой класс Books, добавив метод "self getter":
@XmlRootElement
@XmlSeeAlso({Book.class})
public class Books extends ArrayList<Book> {
public Books() {
this.add(new Book("The Sign of the Four"));
}
@XmlElement(name = "book")
public List<Book> getBooks() {
return this;
}
}
когда вы запустите свой код сортировки, вы получите:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books><book><title>The Sign of the Four</title></book></books>
(для ясности я добавил разрыв строки)