8

द्वारा खोज की बजाय सूची लाने की कोशिश करते समय Google ऐप इंजन nullpointerexception मैं अभी GAE और क्लाउड एंडपॉइंट्स पर शुरू कर रहा हूं। मैंने एक नमूना निरंतर वर्ग बनाया है और मैंने ग्रहण में Google मेनू का उपयोग करके एनपॉइंट क्लास उत्पन्न किया है। अब मैं curl का उपयोग करने के तरीके पर कुछ ट्यूटोरियल का पालन कर रहा था और json स्ट्रिंग को वापस प्राप्त कर रहा हूं और स्पष्ट रूप से जब मैं nullpointerexception फेंकने वाले सभी मानों को सूचीबद्ध करने की कोशिश करता हूं, तो आश्चर्य की बात है कि जब मैं यूआरएल स्ट्रिंग के साथ एक आईडी प्रदान करता हूं तो यह जादूगर रूप से काम करता है। अब, मेरी चिंता इस दो विधि अर्थात listContinent और getContinentप्राथमिक कुंजी

यह वही त्रुटि

curl http://localhost:8888/_ah/api/app/v1/continent 

जो listContinent विधि त्रुटि को ऊपर उठाने के लिए बुला रहा है पैदा कर रही है है के साथ है।

और यह एक बस काम करता है

curl http://localhost:8888/_ah/api/app/v1/continent/1 

जो getContinent विधि बुला रहा है और सही Id यूआरएल यह काम करता है के रूप में उम्मीद के माध्यम से पारित हो जाता है जब।

यह मेरा अंतिम बिंदु वर्ग है -

@Api(name = "app") 
public class ContinentEndpoint { 

    @SuppressWarnings({ "cast", "unchecked" }) 
    public List<Continent> listContinent() { 
     PersistenceManager mgr = getPersistenceManager(); 
     List<Continent> result = new ArrayList<Continent>(); 
     try { 
      Query query = mgr.newQuery(Continent.class); 
      for (Object obj : (List<Object>) query.execute()) { 
       result.add(((Continent) obj)); 
      } 
     } finally { 
      mgr.close(); 
     } 
     return result; 
    } 

    public Continent getContinent(@Named("id") Long id) { 
     PersistenceManager mgr = getPersistenceManager(); 
     Continent continent = null; 
     try { 
      continent = mgr.getObjectById(Continent.class, id); 
     } finally { 
      mgr.close(); 
     } 
     return continent; 
    } 

    private static PersistenceManager getPersistenceManager() { 
     return PMF.get().getPersistenceManager(); 
    } 

} 

और यह मेरा लगातार वर्ग है -

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
@Version(strategy = VersionStrategy.VERSION_NUMBER) 
public class Continent { 

    public long getContinentId() { 
     return continentId; 
    } 

    public void setContinentId(long continentId) { 
     this.continentId = continentId; 
    } 

    public String getContinentName() { 
     return continentName; 
    } 

    public void setContinentName(String continentName) { 
     this.continentName = continentName; 
    } 

    public Date getCreatedOn() { 
     return createdOn; 
    } 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private long continentId; 
    private String continentName; 
    private Date createdOn = new Date(); 
} 

यह मेरा स्टैकट्रेस

Nov 12, 2012 3:07:10 PM com.google.apphosting.utils.jetty.JettyLogger info 
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger 
Nov 12, 2012 3:07:10 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml 
INFO: Successfully processed /home/soham/Workspace/cloudcv/war/WEB-INF/appengine-web.xml 
Nov 12, 2012 3:07:10 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml 
INFO: Successfully processed /home/soham/Workspace/cloudcv/war/WEB-INF/web.xml 
Nov 12, 2012 8:37:11 PM com.google.appengine.tools.development.DevAppServerImpl start 
INFO: The server is running at http://localhost:8888/ 
Nov 12, 2012 8:37:11 PM com.google.appengine.tools.development.DevAppServerImpl start 
INFO: The admin console is running at http://localhost:8888/_ah/admin 
Nov 12, 2012 8:37:53 PM com.google.api.server.spi.SystemService invokeServiceMethod 
SEVERE: null 
java.lang.NullPointerException 
    at com.google.appengine.datanucleus.query.QueryEntityPKFetchFieldManager.fetchLongField(QueryEntityPKFetchFieldManager.java:74) 
    at org.datanucleus.identity.IdentityUtils.getApplicationIdentityForResultSetRow(IdentityUtils.java:101) 
    at com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1009) 
    at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:228) 
    at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:225) 
    at com.google.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96) 
    at com.google.appengine.datanucleus.query.LazyResult$LazyAbstractListIterator.computeNext(LazyResult.java:229) 
    at com.google.appengine.datanucleus.query.AbstractIterator.tryToComputeNext(AbstractIterator.java:131) 
    at com.google.appengine.datanucleus.query.AbstractIterator.hasNext(AbstractIterator.java:126) 
    at com.google.appengine.datanucleus.query.LazyResult$AbstractListIterator.hasNext(LazyResult.java:183) 
    at com.cloudcv.ContinentEndpoint.listContinent(ContinentEndpoint.java:23) 
    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:616) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) 
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:254) 
    at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:135) 
    at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:106) 
    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.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
    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 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383) 
    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.content(HttpConnection.java:938) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

मैं कुछ डिबगिंग किया था और मुझे पता चला है कि Query query = mgr.newQuery(Continent.class); में क्वेरी कुछ भी वापस नहीं कर रही है और for each लूप है ArrayList populating नहीं।

+0

अपना कोड दिखाना लोगों को आपकी मदद करने के लिए बहुत आसान बना देगा। – Amber

+0

@ अंबर बस किया। –

+0

क्या आपने इकाई सूची विधि का परीक्षण किया था और क्या यह काम करना चाहिए? –

उत्तर

21

आप प्राथमिक कुंजी प्रकार के रूप में long का उपयोग नहीं कर सकते हैं। मैं इसके बजाय Long का उपयोग करने का सुझाव दूंगा। आप स्वीकार्य कुंजी प्रकार here के बारे में पढ़ सकते हैं।

+3

शानदार। इसे समझने की कोशिश कर लगभग 3 दिन बर्बाद हो गए। –

+0

आह! यह बात है ... धन्यवाद। –

संबंधित मुद्दे