Serializacja XML "java.lang.NullPointerException"

Serializacja XML "java.lang.NullPointerException"
YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

Na zajęcia z Java to zło, próbuję zrealizować zadanie serializacji pliku XML ze złożonym elementem authors:

Kopiuj
 <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:

Kopiuj
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

Kopiuj
 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:

Kopiuj
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:

Kopiuj
@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


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0

Pokaż pan ten wyjątek bo tak z powietrza to nie umiem.

YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

Mam wyżej napisane:

java.lang.NullPointerException
at books.Book.<init>(Book.java:25)
at books.Main.main(Main.java:65)


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0

Debugowałeś się przez to? (Book.java:25) to pewnie jakiś getter więc zobacz czy w ogóle jakieś pola są wypełniane. Użyj debuggera.

YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

podawałem skąd to się bierze. w konstruktorze: " this.authors.addAll(authors);" to java:25


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0

Sprawdź to:

Kopiuj
        this.authors.addAll(authors);

Bo pewnie wyżej masz tylko:

Kopiuj
List<String> authors;

i jak próbujesz tam dodać autorów to leci NPE.

YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

No mam tak i co mam z tym zrobić?

jak dam:

Kopiuj
 List<String> authors=new ArrayList<>();

to zmienia się umiejscowienie błędów..


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0

Jeśli masz:

Kopiuj
List<String> authors;

a potem wołasz na tym:

Kopiuj
this.authors.addAll(authors);

to na pewno będziesz miał NPE bo próbujesz dodać elementy do kolekcji która jest null'em.

Popraw i pokażd jaki masz błąd.

YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

dałem:

Kopiuj
    List<String> authors=new ArrayList<>();

i teraz jest:

Kopiuj
java.lang.NullPointerException
	at books.BookManager.addBook(BookManager.java:47)




**KOD:**

public Book addBook(Book b) {
		if (b.getTitle().isEmpty() || b.getAuthors().isEmpty()) {
			throw new RuntimeException("nie ma tytułu");
		} else {
			books.add(b);
		}
		return b;
	}

Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0

Jak i gdzie tworzysz tę listę books?

YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0

w MAIN:

Kopiuj
		Book ksiazka = new Book("1", "Laboratorium: Java i XML", new_book_authors, "111-222-333", 2018, "UCZELNIA WYDAWNICZA", 1);


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
L2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 lat
  • Postów:10
0

private List<Book> books;

YO
nie rozumiem co masz na myśli?
L2
tworzysz tylko referencję, bez obiektu, stąd ten NPE
EL
  • Rejestracja:około 13 lat
  • Ostatnio:4 miesiące
0
youmound napisał(a):

w MAIN:

Kopiuj
		Book ksiazka = new Book("1", "Laboratorium: Java i XML", new_book_authors, "111-222-333", 2018, "UCZELNIA WYDAWNICZA", 1);

Tak tworzysz książkę a wyjątek leci Ci na zmiennej books ( books.add(b);). Pewnie masz podobnie jak we wcześniejszym przypadku.

edytowany 1x, ostatnio: eL
0

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.