Serializacja XML "java.lang.NullPointerException"

Odpowiedz Nowy wątek
2018-11-20 12:22
0

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


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D

Pozostało 580 znaków

2018-11-20 12:27
eL
0

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

Pozostało 580 znaków

2018-11-20 12:35
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

Pozostało 580 znaków

2018-11-20 12:45
eL
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.

Pozostało 580 znaków

2018-11-20 12:47
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

Pozostało 580 znaków

2018-11-20 12:50
eL
0

Sprawdź to:

        this.authors.addAll(authors);

Bo pewnie wyżej masz tylko:

List<String> authors;

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

Pozostało 580 znaków

2018-11-20 12:52
0

No mam tak i co mam z tym zrobić?

jak dam:

 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

Pozostało 580 znaków

2018-11-20 12:54
eL
0

Jeśli masz:

List<String> authors;

a potem wołasz na tym:

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.

Pozostało 580 znaków

2018-11-20 13:01
0

dałem:

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

i teraz jest:

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

Pozostało 580 znaków

2018-11-20 13:06
eL
0

Jak i gdzie tworzysz tę listę books?

Pozostało 580 znaków

2018-11-20 13:09
0

w MAIN:

        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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0