Fayyaz - that is the incorrect action to take. That will cause future documents to have fields from all previous ones! All you have to do is:

   private HashMap attributeMap = new HashMap();

        Erik


On Dec 6, 2007, at 9:53 PM, syedfa wrote:


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.scanStartEleme nt(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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to