Если вы разместили трассировку стека, мы можем определить точную строку.Однако при использовании универсальных коллекций смешивание общих и неуниверсальных коллекций является причиной катастрофы.
Ваша первая строка должна выглядеть так:
List<book> list = new ArrayList<book>();
Если метод getAttribute возвращает массивнет смысла использовать List только для итерации с циклом foreach.Вы можете сделать то же самое с массивом, но сначала убедитесь, что он не равен нулю.
А также, именование книги классов строчными буквами противоречит соглашениям Java.