2014-10-14 9 views
5

Używam google datastore do utrzymywania danych jako obiektów modelowej "strefy". Ten model został ostatnio zaktualizowany o więcej parametrów. Po wdrożeniu nowego kodu wywołania w istniejących jednostkach strefy są przyczyną błędu. Istniejące elementy strefy nie mają nowo dodanego parametru (Oznaczono w klasie strefy).App-Engine generuje wyjątek NullPointerException na żądanie getByObjectId podmiotu, który został zaktualizowany

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) 

Jest to kod w 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(); 

        } 
       } 

Jest to kod w służbie -

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

To jest modelem klasy - 'strefa'

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 
} 

Jak mogę rozwiązać ten problem? Z góry dzięki.

Odpowiedz