2015-05-28 22 views
11

Otrzymuję następujący ślad błędu od uruchomienia Lucene. Dołączam segment kodu, który spowodował błąd. Konkretny projekt/złącze jest Lucene for AppengineWyjątek NullPointerException w Lucene-Appengine's SegmentIndexInput metoda readByte

KOD

public static void resetAllIndicesUsingDatastore() { 
    LOG.info("Inside resetAllIndicesUsingDatastore "); 
    StandardAnalyzer analyzer = new StandardAnalyzer(); 
    GaeDirectory directory = new GaeDirectory(LuceneWorker.DOGS);// create dog index 
    IndexWriterConfig config = GaeLuceneUtil.getIndexWriterConfig(LuceneWorker.LUCENE_VERSION, analyzer); 
    IndexWriter writer = null; 
    LOG.info("GOING TO TRY "); 
    try { 
     // delete all elements 
     writer = new IndexWriter(directory, config);//LINE 142 
     LOG.info("Going to delete all that's there "); 
     writer.deleteAll(); 
     writer.commit(); 

     // get all dogs from datastore 
     List<Dog> dogs = DogDaoImpl.getAll(); 
     LOG.info("All dogs size is : " + dogs.size()); 

     for (Dog p : dogs) { 
     LuceneIndexDogTaskQueue.indexDog(p.getDogId()); 
     LOG.info("Dog sent to ask queue for lucene is : " + p.getTitle() + " with id: " + p.getDogId()); 
     } 
     LOG.info("Leaving resetAllIndicesUsingDatastore with no error "); 
    } catch (IOException e) { 
     LOG.info("Leaving resetAllIndicesUsingDatastore with ERROR " + e.getLocalizedMessage() + " msg:: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     if (null != writer) { 
     try { 
      writer.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
    } 

ERROR

com.google.api.server.spi.SystemService invokeServiceMethod: cause={0} 
java.lang.NullPointerException 
    at com.googlecode.luceneappengine.SegmentIndexInput.readByte(SegmentIndexInput.java:70) 
    at org.apache.lucene.store.BufferedChecksumIndexInput.readByte(BufferedChecksumIndexInput.java:41) 
    at org.apache.lucene.store.DataInput.readInt(DataInput.java:98) 
    at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:347) 
    at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:458) 
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:913) 
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:759) 
    at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:454) 
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:783) 
    at com.company.dogappcloud.taskqueue.lucene.LuceneSearchDog.resetAllIndicesUsingDatastore(LuceneSearchDog.java:142) 






//remaining of trace but not as important 

at com.company.dogappcloud.dogappApi.findDog(dogappApi.java:968) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:45) 
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359) 
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160) 
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58) 
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) 
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) 
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:230) 
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) 
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) 
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) 
at java.lang.Thread.run(Thread.java:745) 

Oto mój plik appengine-web.xml a także używam the modified RamUsageEstimator as suggested

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>myApplicationId</application> 
    <version>1</version> 
    <threadsafe>true</threadsafe> 

    <system-properties> 
     <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> 
     <property name="java.util.logging.config.file" 
        value="WEB-INF/java-util-logging.properties"/> 
     <property name="os.version" value="1.0.GAE whatever"/> 
     <property name="os.arch" value="GAE whatever"/> 
    </system-properties> 

    <class-loader-config> 
     <priority-specifier filename="luceneappengine-2.2.0.jar"/> 
    </class-loader-config> 
</appengine-web-app> 
+0

Czy 'katalog' lub' config' null? – immibis

+0

Pokazuję cały mój kod, @immibis. Dlaczego mieliby być nieważni? Jestem nowy w tej całej sprawie. Dlatego cieszę się, że możesz mieć wgląd. Ale nie, nie jest możliwe, że albo będzie null tylko przez zwykłą znajomość Javy. –

+0

która linia w 'void resetAllIndicesUsingDatastore' to linia # 142? –

Odpowiedz

4

Patrząc na kod SegmentIndexInput przystawka jest zerowa.

@Override 
    public byte readByte() throws IOException { 
70  if(hunkPointer >= hunk.bytes.length) { 
        hunkPointer = 0; 

Patrząc na kod GaeDirectory jest zerowa, ponieważ segment ma żadnych bryły utworzone. Przed użyciem nowego katalogu powinieneś zadzwonić pod numer createOutput(String name) lub touchFile(StringName), aby utworzyć segment z co najmniej jedną postacią.