Dear Fellow Java & Lucene developers: I am a Java developer learning lucene and I am currently going through the book Lucene in Action. At present, I am trying to run the sample code for indexing an xml document using sax. My code has been slightly updated for Lucene version 2.2:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package lucenexml; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.SAXException; import org.xml.sax.Attributes; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; /** * * @author fayyaz */ public class SAXXMLHandler extends DefaultHandler implements DocumentHandler{ private StringBuffer elementBuffer=new StringBuffer(); private HashMap attributeMap; private Document doc; /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { // TODO code application logic here SAXXMLHandler handler=new SAXXMLHandler(); Document doc=handler.getDocument(new FileInputStream(new File(args[0]))); System.out.println(doc); } public Document getDocument(InputStream is) throws DocumentHandlerException{ SAXParserFactory spf=SAXParserFactory.newInstance(); try{ SAXParser parser=spf.newSAXParser(); parser.parse(is, this); } catch (IOException e){ throw new DocumentHandlerException("Cannot parse XML document", e); } catch (ParserConfigurationException e) { throw new DocumentHandlerException("Cannot parse XML document", e); } catch (SAXException e){ throw new DocumentHandlerException("Cannot parse XML document", e); } return doc; } public void startDocument(){ doc=new Document(); } public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException{ elementBuffer.setLength(0); attributeMap.clear(); if(atts.getLength()>0){ attributeMap=new HashMap(); for(int i=0; i<atts.getLength(); i++){ attributeMap.put(atts.getQName(i), atts.getValue(i)); } } } public void characters(char[] text, int start, int length){ elementBuffer.append(text, start, length); } public void endElement(String uri, String localName, String qName) throws SAXException{ if(qName.equals("address-book")){ return; } else if(qName.equals("contact")){ Iterator iter=attributeMap.keySet().iterator(); while(iter.hasNext()){ String attName=(String)iter.next(); String attValue=(String)attributeMap.get(attName); doc.add(new Field(qName, elementBuffer.toString(), Field.Store.YES,Field.Index.NO)); } } } } However, although the code compiles, I get the following runtime error when I pass the file addressbook.xml (which is used in the book) as a runtime argument: Exception in thread "main" java.lang.NullPointerException at lucenexml.SAXXMLHandler.startElement(SAXXMLHandler.java:81) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(SAXParser.java:198) at lucenexml.SAXXMLHandler.getDocument(SAXXMLHandler.java:59) at lucenexml.SAXXMLHandler.main(SAXXMLHandler.java:49) Java Result: 1 What am I doing wrong? Any help would be greatly appreciated. Thanks in advance. Sincerely; Fayyaz -- View this message in context: http://www.nabble.com/Error-running-Lucene-in-Action-code-tf4947242.html#a14164565 Sent from the Lucene - Java Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]