Thanks very much for your reply. I commented out the line:
attributeMap.clear();
in the startElement() method, and the code ran!
Thanks for your prompt reply, and my apologies for the delay in responding.
All the best.
Fayyaz
Michael McCandless-2 wrote:
>
>
> I think you need to initialize attributeMap, eg add " = new HashMap()" in
> the declaration?
>
> Mike
>
> "syedfa" <[EMAIL PROTECTED]> wrote:
>>
>> 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]
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
--
View this message in context:
http://www.nabble.com/Error-running-Lucene-in-Action-code-tf4947242.html#a14205907
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]