Mangesh Mandavgane
Mangesh Mandavgane

Reputation: 360

org.datanucleus.store.types.sco.simple.HashSet cannot be cast to java.util.Date

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

Answers (1)

Ying Li
Ying Li

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

Related Questions