I am trying change my RSS Reader code. I have something like this:
public class RSSFeedParser {
static final String TITLE = "title";
static final String DESCRIPTION = "description";
static final String CHANNEL = "channel";
static final String LANGUAGE = "language";
static final String COPYRIGHT = "copyright";
static final String LINK = "link";
static final String AUTHOR = "author";
static final String ITEM = "item";
static final String PUB_DATE = "pubDate";
static final String GUID = "guid";
public  InputStream in = read();
private XMLInputFactory inputFactory = XMLInputFactory.newInstance();
private XMLEventReader eventReader;
final URL url;
public RSSFeedParser(String feedUrl) {
    try {
        url = new URL(feedUrl);
        eventReader = inputFactory.createXMLEventReader(in);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
public Feed readFeed() {
    Feed feed = null;
    try {
        boolean isFeedHeader = true;
        String description = "";
        String title = "";
        String link = "";
        String language = "";
        String copyright = "";
        String author = "";
        String pubDate = "";
        String guid = "";
        while (eventReader.hasNext()) {
            XMLEvent event = eventReader.nextEvent();
            if (event.isStartElement()) {
                String localPart = event.asStartElement().getName().getLocalPart();
                switch (localPart) {
                    case ITEM:
                        if (isFeedHeader) {
                            isFeedHeader = false;
                            feed = new Feed(title, link, description, language, copyright, pubDate);
                        }
                        event = eventReader.nextEvent();
                        break;
                    case TITLE:
                        title = getCharacterData(event, eventReader);
                        break;
                    case DESCRIPTION:
                        description = getCharacterData(event, eventReader);
                        break;
                    case LINK:
                        link = getCharacterData(event, eventReader);
                        break;
                    case GUID:
                        guid = getCharacterData(event, eventReader);
                        break;
                    case LANGUAGE:
                        language = getCharacterData(event, eventReader);
                        break;
                    case AUTHOR:
                        author = getCharacterData(event, eventReader);
                        break;
                    case PUB_DATE:
                        pubDate = getCharacterData(event, eventReader);
                        break;
                    case COPYRIGHT:
                        copyright = getCharacterData(event, eventReader);
                        break;
                }
            }
            else if(event.isEndElement()) {
                if (event.asEndElement().getName().getLocalPart() == (ITEM)) {
                    FeedMessage message = new FeedMessage();
                    message.setAuthor(author);
                    message.setDescription(description);
                    message.setGuid(guid);
                    message.setLink(link);
                    message.setTitle(title);
                    feed.getMessages().add(message);
                }
            }
        }
    } catch (XMLStreamException e) {
        throw new RuntimeException(e);
    }
    return feed;
}
private InputStream read(){
    try{
        return url.openStream();
    }catch (IOException e){
        throw new RuntimeException(e);
    }
}
private String getCharacterData(XMLEvent event, XMLEventReader eventReader) throws XMLStreamException {
    String results="";
    event = eventReader.nextEvent();
    if(event instanceof Characters){
        results = event.asCharacters().getData();
    }
    return results;
}
And main:
   public static void main(String[] args) {
    RSSFeedParser parser = new RSSFeedParser("http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/rss.xml");
    Feed feed = parser.readFeed();
    System.out.println(feed);
    for (FeedMessage message : feed.getMessages()) {
        System.out.println(message);
        RSSFeedWriter writer = new RSSFeedWriter(feed, "articles.rss");
        try {
            writer.write();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
I get NullPointerException in
public  InputStream in = read(); 
return url.openStream();
RSSFeedParser parser = new RSSFeedParser("http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/rss.xml");
What's wrong with this code? Everything was working when the InputStream, XMLEventReader and XMLInputFactory was in separate class.
 
     
    