JAXB имеет проблемы с поддержкой интерфейсов и абстрактных классов; обычно он не знает, какой подкласс создать. Проблема в том, что обычным явлением является наличие класса в соответствии с:
ArrayList list;
@XMLElement
public List getList() {return this.list;}
Чтобы обойти это, JAXB даже не пытается создать экземпляр класса свойств (например, List), полученного из пары getter / setter, если это Collection. Он просто предполагает, что он не равен нулю и не может быть изменен.
Вероятно, самый простой способ обойти это - пометить ваш бизнес-интерфейс с помощью @XMLTransient и добавить другую пару геттер / установщик с @XMLElement для представления данных, которые вы хотите представить в JAXB. Я обычно делаю их защищенными, а не публичными, потому что не хочу, чтобы поведение JAXB было несколько глупым как часть публичного контракта моих классов.