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-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org
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-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org