Reputation: 360
From Last Few days Suddenly Our Production deployed application is throwing this error
org.datanucleus.store.types.sco.simple.HashSet cannot be cast to java.util.Date
We are using datanucleus-api-jpa- 3.1.3, datanucleus-api-jdo- 3.1.3 and Java 1.7
It happens when we are retrieving entry.
I have checked all the things but not getting root cause of this why this happening. I have checked this links 1) stackoverflow-questionId-22307734 (2) datanucleus-javadocs (3) gae-jdo-docs
Sample Code:
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
public class MyClass {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long Id;
@Persistent
private String domainName;
@Persistent
private String customerName;
@Persistent
private String companyName;
@Persistent
private Date installationDate;
@Persistent
private Date renewalDate;
.....
getter...
setter...
}
Exception Message Full Stack-trace:
Exception message : org.datanucleus.store.types.sco.simple.HashSet cannot be cast to java.util.Date (ErrorHandler.java:10) 2018-02-02 00:15:28.671 IST com.company.projectname.classnames.ErrorHandler errorHandler: Error in class DataAccessLayer (ErrorHandler.java:11) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.dataaccesslayer.MyClass.jdoReplaceField(MyClass.java) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.AbstractStateManager.replaceField(AbstractStateManager.java:2387) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1877) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1781) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.store.types.sco.SCOUtils.createSCOWrapper(SCOUtils.java:241) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.store.types.sco.SCOUtils.newSCOInstance(SCOUtils.java:139) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.wrapSCOField(JDOStateManager.java:2230) 2018-02-02 00:15:28.672 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.FetchFieldManager.fetchFieldFromEntity(FetchFieldManager.java:468) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.FetchFieldManager.fetchObjectField(FetchFieldManager.java:408) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2353) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.dataaccesslayer.MyClass.jdoReplaceField(MyClass.java) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.dataaccesslayer.MyClass.jdoReplaceFields(MyClass.java) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1935) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1962) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.EntityUtils$1.fetchFields(EntityUtils.java:974) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.loadFieldValues(JDOStateManager.java:764) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.JDOStateManager.initialiseForHollow(JDOStateManager.java:205) 2018-02-02 00:15:28.673 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.StateManagerFactory.newForHollowPopulated(StateManagerFactory.java:89) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.state.ObjectProviderFactory.newForHollowPopulated(ObjectProviderFactory.java:75) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.ObjectManagerImpl.findObject(ObjectManagerImpl.java:2882) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1014) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:229) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:226) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.LazyResult.resolveAll(LazyResult.java:121) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115) 2018-02-02 00:15:28.674 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) org.datanucleus.store.query.AbstractQueryResult.toArray(AbstractQueryResult.java:400) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) java.util.ArrayList.addAll(ArrayList.java:559) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.datastore.DataAccessLayer.searchObjects(DataAccessLayer.java:217) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.businessaccesslayer.Manager.getCustomeAppByURL(Manager.java:1475) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) com.company.projectname.sso.apps.marketplace.ServletTest.doGet(ServletTest.java:155) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 2018-02-02 00:15:28.675 IST com.company.projectname.classnames.ErrorHandler errorHandler:
(ErrorHandler.java:14) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Thank You.
Upvotes: 2
Views: 185
Reputation: 2519
This is more of a data issue than code. How did you sanitize your data before saving or uploading it to your storage?
So it seems like some supposedly "Date" field in your retrieved data is not in fact a proper "Date" field. The best way would to be retrieve small amount of data at a time and then have it split out a unique identifiable field each result.
So you will see "John, David, Kate, ERROR", and you will know somewhere in your Kate entry, a Date field is not as it seems. It can be something like a encoding issue or formatting or maybe just a truncation thing. But either way, the error is with your data, not your code. Hence, this issue only happens once in a while (when it hits bad data).
Upvotes: 2