Na zajęcia z Java to zło, próbuję zrealizować zadanie serializacji pliku XML ze złożonym elementem authors:
<book id="100E27">
<title>100 sposobów na Excel 2007 PL. Tworzenie funkcjonalnych arkuszy</title>
<authors>
<author>David Hawley</author>
<author>Raina Hawley</author>
</authors>
<isbn>978-83-246-1331-1</isbn>
<publisher>Helion</publisher>
<year>2008</year>
<pages>368</pages>
</book>
Robiąc to tak:
main.java:
try {
JAXBContext context = JAXBContext.newInstance(BookList.class);
Unmarshaller um = context.createUnmarshaller();
FileReader file = new FileReader("books.2.xml");
BookList books = (BookList) um.unmarshal(file);
file.close();
BookManager bm = new BookManager(books.getBooks());
List<String> new_book_authors = new ArrayList<>();
new_book_authors.add("Michał");
Book ksiazka = new Book("1", "Laboratorium: Java i XML", new_book_authors, "111-222-333", 2018,
"UCZELNIA WYDAWNICZA", 1);
bm.addBook(ksiazka);
List<Book> bs = bm.searchByTitle("Java");
System.out.println(bs);
BookList bls = new BookList();
bls.setBooks(bs);
System.out.println(bls);
Marshaller m = context.createMarshaller();
FileWriter fiW = new FileWriter("lab3.xml");
m.marshal(bls, fiW);
fiW.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
konstruktor
public Book(String id, String title, List<String> authors, String isbn, Integer year, String publisher, Integer pages) {
this.id = id;
this.title = title;
this.authors.addAll(authors);
this.isbn = isbn;
this.year = year;
this.publisher = publisher;
this.pages = pages;
}
otrzymuję wymowne błędy:
java.lang.NullPointerException
at books.Book.<init>(Book.java:25)
at books.Main.main(Main.java:65)
błędy są odpowiednio na liniach:
this.authors.addAll(authors);
Book ksiazka = new Book("1", "Laboratorium: Java i XML", new_book_authors, "111-222-333", 2018, "UCZELNIA WYDAWNICZA", 1);
oczywiście używam wrapperaXML:
@XmlRootElement(name = "books")
class BookList {
private List<Book> books;
@XmlElementWrapper
@XmlElement(name = "book")
public List<Book> getBooks() {
return books;
}
Ktoś ma pomysł? ;) Wkrótce kolejne zajęcia a ja na tym utknąłem ;p