Namierzanie błędu przy getMessage() = null

0

Pisze samodzielnie prosty RSS Reader i napotkałem pewien błąd. Mianowicie przy uruchamianiu programu wyskakuje mi wyjątek. Chciałem dowiedzieć się co jest nie tak dlatego spróbowałem wyciągnąć z niego jakąkolwiek informacje przez e.getMessage() ale dostałem null. Sprawdziłem w JavaDocu no i faktycznie, null jest możliwy więc niby nic nadzwyczajnego. Tylko jak w takim wypadku namierzyć problem?
http://pastebin.com/dPyh4SD2
http://pastebin.com/6QbxdJHA

public class Main {

    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("http://facet.wp.pl/rss.xml");
        Feed feed = new Feed();
        RSSParser parser = new RSSParser(url);
        parser.RSSFeed();

        for(String wejscia : feed.entries){
            System.out.println(wejscia);
        }
    }
}
0

Wyciągnąłem z tego, że to jest NullPointerException który wyskakuje w at RSSParser.RSSFeed(RSSParser.java:28).
W zły sposób próbuje odczytać wartości między objektami. Może mi ktoś podpowiedzieć co robię źle?

1

Tak na szybko przejrzałem to co tam masz i po prostu wygląda na to, że źle się dobierasz do elementów.

public void RSSFeed() {
    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(url.openStream());

        NodeList object = doc.getElementsByTagName("item");
        NodeList partOfObject = doc.getElementsByTagName("item");
            for(int i = 0; i<object.getLength(); i++) {
                Node currentNode = object.item(i);
                Element currentElement = (Element)currentNode;
                feed.setTitle(currentElement.getElementsByTagName("title").item(0).getChildNodes().item(0).getNodeValue());
                feed.setAuthor("author");
                feed.setLink(currentElement.getElementsByTagName("link").item(0).getChildNodes().item(0).getNodeValue());
                feed.setDescription(currentElement.getElementsByTagName("description").item(0).getChildNodes().item(0).getNodeValue());

                feed.entries.add(feed.toString());
            }
        } catch (Exception e) {
            System.out.println("Blad przy parsowaniu adresu URL.");
            System.out.println(e.getMessage());
        }
    }
}

Ten kod powyżej działa, zrobiłem to na podstawie stacka oczywiście.
Nie masz też czegoś takiego jak author w tym Twoim xml'u.
Kolejna sprawa to dodajesz coś do feed a w głównej funkcji korzystasz zupełnie innego feed który jest nullem. Powinieneś tam dostać się do feed z klasy RSSParser.

0

faktycznie działa. to dobieranie się do elementów przeniosłem do nowej metody

 public String getValue(Element element, String nodeName){
        return element.getElementsByTagName(nodeName).item(0).getChildNodes().item(0).getNodeValue();

i teraz wygląda wszystko tak:

            for(int i = 0; i<object.getLength(); i++) {
                Node currentNode = object.item(i);
                Element currentElement = (Element)currentNode;
                feed.setTitle(getValue(currentElement, "title"));
                feed.setPubDate(getValue(currentElement, "pubDate"));
                feed.setLink(getValue(currentElement, "link"));
                feed.setDescription(getValue(currentElement, "description"));

Wszystko działa jak powinno. Tylko zastanawia mnie na jakiej zasadzie działa Node currentNode = object.item(i);

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