2014-10-14 6 views
5

Ich verwende Google Datenspeicher, um Daten als Objekte einer Modellklasse - 'Zone' persistent zu machen. Dieses Modell wurde kürzlich mit mehr Parametern aktualisiert. Wenn ich den neuen Code bereitgestellt habe, führen Aufrufe von vorhandenen Entitäten "Zone" zu einem Fehler. Existierende Zonenentitäten haben nicht den neu hinzugefügten Parameter (In der Zonen-Klasse markiert).App-Engine löst NullPointerException beim Aufruf getByObjectId einer Entität aus, die aktualisiert wurde

ERROR: Error in Service {} at com.tryout.cdapp.exceptions.handler.CNDApplicationExceptionHandler.(CNDApplicationExceptionHandler.java:30) on 2014-10-14 03:21:48,002 
java.lang.NullPointerException 
    at com.google.appengine.datanucleus.scostore.FKListStore.getIndexPropertyName(FKListStore.java:965) 
    at com.google.appengine.datanucleus.scostore.FKListStore.getFilterPredicates(FKListStore.java:940) 
    at com.google.appengine.datanucleus.scostore.FKListStore.listIterator(FKListStore.java:383) 
    at com.google.appengine.datanucleus.scostore.FKListStore.listIterator(FKListStore.java:349) 
    at com.google.appengine.datanucleus.scostore.FKListStore.iterator(FKListStore.java:342) 
    at org.datanucleus.store.types.sco.backed.List.loadFromStore(List.java:304) 
    at org.datanucleus.store.types.sco.backed.List.initialise(List.java:253) 
    at org.datanucleus.store.types.sco.SCOUtils.createSCOWrapper(SCOUtils.java:253) 
    at org.datanucleus.store.types.sco.SCOUtils.newSCOInstance(SCOUtils.java:139) 
    at org.datanucleus.store.mapped.mapping.AbstractContainerMapping.replaceFieldWithWrapper(AbstractContainerMapping.java:396) 
    at org.datanucleus.store.mapped.mapping.AbstractContainerMapping.postFetch(AbstractContainerMapping.java:414) 
    at com.google.appengine.datanucleus.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:599) 
    at org.datanucleus.state.JDOStateManager.loadFieldsFromDatastore(JDOStateManager.java:1638) 
    at org.datanucleus.state.JDOStateManager.validate(JDOStateManager.java:3511) 
    at org.datanucleus.ObjectManagerImpl.findObject(ObjectManagerImpl.java:3379) 
    at org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1722) 
    at org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1740) 
    at com.tryout.cdapp.dao.impl.BaseDaoImpl.findById(BaseDaoImpl.java:103) 
    at com.tryout.cdapp.service.impl.ZoneServiceImpl.getZoneById(ZoneServiceImpl.java:55) 
    at com.tryout.cdapp.resource.ZoneResource.getById(ZoneResource.java:75) 
    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 org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) 
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:280) 
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:234) 
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:221) 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 
    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 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:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442) 
    at java.lang.Thread.run(Thread.java:724) 

Dies ist der Code in der Dao -

private final Class<T> persistentClass; 
    public BaseDaoImpl() { 
      persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
     } 
     public T findById(Serializable id) { 

        PersistenceManager pm = PMF.get().getPersistenceManager(); 

        try { 
         T t = pm.getObjectById(persistentClass, id); 
         t.toString(); 
         return t; 

        } finally { 

         pm.close(); 

        } 
       } 

Dies ist der Code in Betrieb ist -

public Zone getZoneById(String id) { 
     Zone zone = zoneDao.findById(id); 
     return zone; 
    } 

Diese Modellklasse ist - 'Zone'

public class Zone implements Serializable { 

    private static final long serialVersionUID = 3946928960755099560L; 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true") 
    private String id; 
    @Persistent 
    private String name; 
    @Persistent 
    private String siteId; 
    @Persistent 
    private String orgId; 
    @Persistent(defaultFetchGroup = "true") 
    private List<LocationCoordinates> locationCoordinates; 
    @Persistent 
    private Date created; 
    @Persistent 
    private String description; 
    @Persistent 
    private String urlExtension; 
    @Persistent 
    private Integer timeSpentThreshold; 
    @Persistent 
    private Double tuningNumber; 
    @Persistent(defaultFetchGroup = "true") 
    private HashMap<String, String> zonePayload; 
    @Persistent(defaultFetchGroup = "true") 
    private List<ZoneSignalValue> zoneSignalValueList; //Newly Added 

    //Getters and Setters 
} 

Wie kann ich das beheben? Vielen Dank im Voraus.

Antwort

Verwandte Themen