Dear fellow Java developers:

I am trying to run the XML Query Parser example that comes with Lucene 3.0
source distribution.  I have the application structured identical to the one
you download, and I am trying to run it in eclipse.  When I launch the
application, fill out the form that appears on index.jsp, and then submit it
to search the index, I get the following error 505:

javax.servlet.ServletException: Error processing query

org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.NullPointerException

org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


I absolutely have no idea why this is happening, as I even structured the
package of the servlet in eclipse identical to the way it is in the example. 
I have attached my entire servlet, "FormBasedXmlQueryDemo" below:

public class FormBasedXmlQueryDemo extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        private QueryTemplateManager queryTemplateManager;
        private CorePlusExtensionsParser xmlParser;
        private IndexSearcher searcher;
        private Analyzer analyzer = new
StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
        
    public FormBasedXmlQueryDemo() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
        public void init(ServletConfig config) throws ServletException {
                // TODO Auto-generated method stub
                super.init(config);
                
                try{
                        
                        openExampleIndex();
                        
                        String xslFile=config.getInitParameter("xslFile");
                        String defaultStandardQueryParserField =
config.getInitParameter("defaultStandardQueryParserField");
                        queryTemplateManager = new
QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/" +
xslFile));
                        xmlParser = new 
CorePlusExtensionsParser(defaultStandardQueryParserField,
analyzer);
                        
                }catch(Exception e){
                        throw new ServletException("Error loading query 
template", e);
                }
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

        }

        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
                // TODO Auto-generated method stub
                
                Properties completedFormFields = new Properties();
                Enumeration pNames = request.getParameterNames();
                
                while (pNames.hasMoreElements()){
                        
                        String propName = (String) pNames.nextElement();
                        String value = request.getParameter(propName);
                        
                        if ((value != null) && (value.trim().length()>0)){
                                completedFormFields.setProperty(propName, 
value);
                        }
                }
                
                try{
                        org.w3c.dom.Document xmlQuery =
queryTemplateManager.getQueryAsDOM(completedFormFields);                        
                        Query query = 
xmlParser.getQuery(xmlQuery.getDocumentElement());
                        TopDocs topDocs = searcher.search(query, 10);
                        
                        if (topDocs != null) {
                                ScoreDoc[] sd = topDocs.scoreDocs;
                                Document[] results = new Document[sd.length];
                                
                                for(int i = 0; i < results.length; i++){
                                        
                                        results[i] = searcher.doc(sd[i].doc);
                                        request.setAttribute("results", 
results);
                                }
                        }
                        
                        RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/index.jsp");
                        dispatcher.forward(request, response);
                }
                catch(Exception e){
                        throw new ServletException("Error processing query", e);
                }
        }
        
        private void openExampleIndex() throws CorruptIndexException, 
IOException {
                
                
                RAMDirectory rd = new RAMDirectory();
                IndexWriter writer = new IndexWriter(rd, analyzer,
IndexWriter.MaxFieldLength.LIMITED);
                InputStream dataIn =
getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
                BufferedReader br = new BufferedReader(new 
InputStreamReader(dataIn));
                String line = br.readLine();
                
                while (line != null){
                        
                        line = line.trim();
                        if (line.length() > 0){
                                
                                StringTokenizer st = new StringTokenizer(line, 
"\t");
                                Document doc = new Document();
                                doc.add(new 
Field("location",st.nextToken(),Field.Store.YES,
                                                Field.Index.ANALYZED_NO_NORMS));
                                doc.add(new 
Field("salary",st.nextToken(),Field.Store.YES,
                                                Field.Index.ANALYZED_NO_NORMS));
                                doc.add(new 
Field("type",st.nextToken(),Field.Store.YES,
                                                Field.Index.ANALYZED_NO_NORMS));
                                doc.add(new 
Field("description",st.nextToken(),Field.Store.YES,
                                                Field.Index.ANALYZED));
                                writer.addDocument(doc);
                        }
                        
                        line = br.readLine();
                }
                
                writer.close();
        }

}



When I was tracing through the code, it appears that it was throwing the
exception just as it tried to process the line:

TopDocs topDocs = searcher.search(query, 10);

Does anyone know where I am going wrong?  

Thanks in advance to all who reply.
-- 
View this message in context: 
http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26896711.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to