Hi, Sorry if I sounded like adding the finally block will solve your problem. It will not. >From the cursory look at your code, I don't see why you are passing >IndexWriter INTO indexFile(....) method. I think you should change that. Then, your code should look like this:
IndexWriter writer = null; try { writer = new IndexWriter(.......) ... all your field/document adding logic } catch (IOException) { ... however you want to handle this } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { .. nothing you can do about it other than log it } } Eventually you will likely end up changing this code, because you don't want to open and close IndexWriter for _every_ File. You probably want to open new IndexWriter _outside_ that method... and then pass it into the method, and close it in the finally block outside the method. Why not just grab the Lucene in Action code? It has the file indexer, various parsers (RTF, MS Word, XML, HTML, PDF) and tt's free - http://lucenebook.com/ . Otis ----- Original Message ---- From: Shivani Sawhney <[EMAIL PROTECTED]> To: java-user@lucene.apache.org Sent: Thursday, February 16, 2006 12:32:40 AM Subject: RE: ArrayIndexOutOfBoundsException while closing the index writer Hi Otis, Thanks for such a quick reply. I tried using finally, but it didn't help. I guess if I explain the integration of lucene with my app in little detail then you probably can help me better. I allow users to upload documents, which are then indexed, and search on them. Now I am getting this error when I am trying to index the document and particularly while closing the index writer. If we look closely at the error log, it's giving an error at org.apache.lucene.index.FieldInfos.fieldInfo(FieldInfos.java:135) i.e., when lucene tries to get something by the field name, return (FieldInfo) byName.get(fieldName); , now what beats me is that, indexing on fields has already been done by the time we want to close the index writer, so how come I don't get an error while indexing, what goes wrong when I am trying to close the index writer. Please see if you can help me with this.... Thanks in advance. The code used for indexing is as follows: public void indexFile(IndexWriter indexwriter, File resumeFile) { Document document = new Document(); try { File afile[] = indexDirFile.listFiles(); boolean flag = false; if (afile.length <= 0) flag = true; indexwriter = new IndexWriter(indexDirFile, new StandardAnalyzer(), flag); try { document.add(Field.Text(IndexerColumns.contents, new FileReader(resumeFile))); } catch (FileNotFoundException e) { e.printStackTrace(); throw new MyRuntimeException(e.getMessage(), e); } document.add(Field.Keyword( IndexerColumns.id, String.valueOf(mapLuceneParams.get(IndexerColumns.id)) )); for (int i = 0; i < this.columnInfos.length; i++) { ColumnInfo columnInfo = columnInfos[i]; String value = String.valueOf(mapLuceneParams.get(columnInfo.columnName)); if (value != null) { value = value.trim(); if (value.length() != 0) { if (columnInfo.istokenized) { document.add(Field.Text(columnInfo.columnName, value)); } else { document.add(Field.Keyword(columnInfo.columnName, value)); } } } } document.add(Field.Keyword(IndexerColumns.filePath, String.valueOf(mapLuceneParams.get(IndexerColumns.filePath)))); try { indexwriter.addDocument(document); } catch (IOException e) { e.printStackTrace(); throw new MyRuntimeException(e.getMessage(), e); } indexwriter.close(); } catch (IOException e) { e.printStackTrace(); throw new Error(e); }finally { if(indexwriter != null) { indexwriter.close(); } } Regards, Shivani -----Original Message----- From: Otis Gospodnetic [mailto:[EMAIL PROTECTED] Sent: 16 February, 2006 10:16 AM To: java-user@lucene.apache.org Subject: Re: ArrayIndexOutOfBoundsException while closing the index writer Who knows what else the app is doing. However, I can quickly suggest that you add a finally block and close your writer in there if writer != null. Otis ----- Original Message ---- From: Shivani Sawhney <[EMAIL PROTECTED]> To: java-user@lucene.apache.org Sent: Wednesday, February 15, 2006 11:31:12 PM Subject: ArrayIndexOutOfBoundsException while closing the index writer Hi, I have used Lucene in my application and am just indexing and searching on some documents. The code that indexes the documents was working fine till yesterday and suddenly stopped working. I get an error when I am trying to close the index writer. The code is as follows: . IndexWriter indexwriter = new IndexWriter(indexDirFile, new StandardAnalyzer(), flag); indexFile(indexwriter, resumeFile); indexwriter.close(); //causing errors } catch (IOException e) { e.printStackTrace(); throw new Error(e); } . And the error log is as follows: 2006-02-15 18:47:48,748 WARN [org.apache.struts.action.RequestProcessor] Unhandled Exception thrown: class java.lang.ArrayIndexOutOfBoundsException 2006-02-15 18:47:48,748 ERROR [org.jboss.web.localhost.Engine] StandardWrapperValve[action]: Servlet.service() for servlet action threw exception java.lang.ArrayIndexOutOfBoundsException: 105 >= 25 at java.util.Vector.elementAt(Vector.java:432) at org.apache.lucene.index.FieldInfos.fieldInfo(FieldInfos.java:135) at org.apache.lucene.index.FieldsReader.doc(FieldsReader.java:103) at org.apache.lucene.index.SegmentReader.document(SegmentReader.java:237) at org.apache.lucene.index.SegmentMerger.mergeFields(SegmentMerger.java:169) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:97) at org.apache.lucene.index.IndexWriter.mergeSegments(IndexWriter.java:425) at org.apache.lucene.index.IndexWriter.flushRamSegments(IndexWriter.java:373) at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:193) at rd.admin.NewIndexer.indexTextFile(NewIndexer.java:108) at rd.admin.AddResume.indexOneRow(AddResume.java:38) at rd.admin.LuceneGateway.buildMapAndIndex(LuceneGateway.java:46) at rd.admin.LuceneGateway.indexResume(LuceneGateway.java:30) at rd.admin.UploadResumeAgainstRequisition.npExecute(UploadResumeAgainstRequisi tion.java:106) at np.core.BaseNPAction.execute(BaseNPAction.java:116) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProces sor.java:421) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:157) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.ja va:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContext Valve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:104) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalVal ve.java:66) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:102) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssoci ationValve.java:153) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:102) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase .java:540) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:102) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java: 54) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137 ) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118 ) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne ction(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:683) at java.lang.Thread.run(Thread.java:595) Can someone please suggest a solution or even the cause of the problem? Thanks in advance. Regards, Shivani --------------------------------------------------------------------- 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]