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]

Reply via email to