DateTimeZone 和 Stub 子类
org.joda.time.DateTimeZone 具有用于序列化的嵌套类 Stub。
有人知道它是如何工作的吗?
我正在使用 Hibernate UserType 作为 joda-DateTime。当 hibernate 序列化我的对象时,我从 Stub.readResolve() 方法中得到异常。
日志
Caused by: net.sf.ehcache.CacheException: When configured copyOnRead or copyOnWrite, a Store will only accept Serializable values
at net.sf.ehcache.store.compound.SerializationCopyStrategy.copy(SerializationCopyStrategy.java:47)
at net.sf.ehcache.store.compound.Segment.potentiallyCopy(Segment.java:176)
at net.sf.ehcache.store.compound.Segment.decode(Segment.java:170)
at net.sf.ehcache.store.compound.Segment.get(Segment.java:206)
at net.sf.ehcache.store.compound.CompoundStore.get(CompoundStore.java:156)
at net.sf.ehcache.store.compound.CompoundStore.getQuiet(CompoundStore.java:163)
at net.sf.ehcache.Cache.searchInStoreWithoutStats(Cache.java:1718)
at net.sf.ehcache.Cache.get(Cache.java:1375)
at net.sf.ehcache.Cache.get(Cache.java:1335)
at com.softcomputer.softlab.persistence.cache.EhCacher.getFromCache(EhCacher.java:187)
at com.softcomputer.softlab.persistence.cache.EhCacher.getElement(EhCacher.java:110)
at com.softcomputer.softlab.persistence.cache.JpaCache$JpaLoader.getElement(JpaCache.java:85)
at com.softcomputer.softlab.persistence.cache.EntityListCache.getEntities(EntityListCache.java:147)
at com.softcomputer.softlab.repo.core.CannedMessageRepo.findById(CannedMessageRepo.java:65)
.............
... 148 more
Caused by: java.lang.IllegalArgumentException: The datetime zone id 'WET-2WET' is not recognised
at org.joda.time.DateTimeZone.forID(DateTimeZone.java:215)
at org.joda.time.DateTimeZone$Stub.readResolve(DateTimeZone.java:1207)
....
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1131)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1779)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
at org.joda.time.chrono.ISOChronology$Stub.readObject(ISOChronology.java:231)
....
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1044)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:494)
at net.sf.ehcache.Element.readObject(Element.java:796)
....
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1044)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
at net.sf.ehcache.store.compound.SerializationCopyStrategy.copy(SerializationCopyStrategy.java:45)
... 174 more
org.joda.time.DateTimeZone has nested class Stub that it using for serialization.
Somobody knows how is it work?
I am using Hibernate UserType for joda-DateTime. And when hibernate serialize my objects, I get exception from Stub.readResolve() method.
Log
Caused by: net.sf.ehcache.CacheException: When configured copyOnRead or copyOnWrite, a Store will only accept Serializable values
at net.sf.ehcache.store.compound.SerializationCopyStrategy.copy(SerializationCopyStrategy.java:47)
at net.sf.ehcache.store.compound.Segment.potentiallyCopy(Segment.java:176)
at net.sf.ehcache.store.compound.Segment.decode(Segment.java:170)
at net.sf.ehcache.store.compound.Segment.get(Segment.java:206)
at net.sf.ehcache.store.compound.CompoundStore.get(CompoundStore.java:156)
at net.sf.ehcache.store.compound.CompoundStore.getQuiet(CompoundStore.java:163)
at net.sf.ehcache.Cache.searchInStoreWithoutStats(Cache.java:1718)
at net.sf.ehcache.Cache.get(Cache.java:1375)
at net.sf.ehcache.Cache.get(Cache.java:1335)
at com.softcomputer.softlab.persistence.cache.EhCacher.getFromCache(EhCacher.java:187)
at com.softcomputer.softlab.persistence.cache.EhCacher.getElement(EhCacher.java:110)
at com.softcomputer.softlab.persistence.cache.JpaCache$JpaLoader.getElement(JpaCache.java:85)
at com.softcomputer.softlab.persistence.cache.EntityListCache.getEntities(EntityListCache.java:147)
at com.softcomputer.softlab.repo.core.CannedMessageRepo.findById(CannedMessageRepo.java:65)
.............
... 148 more
Caused by: java.lang.IllegalArgumentException: The datetime zone id 'WET-2WET' is not recognised
at org.joda.time.DateTimeZone.forID(DateTimeZone.java:215)
at org.joda.time.DateTimeZone$Stub.readResolve(DateTimeZone.java:1207)
....
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1131)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1779)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
at org.joda.time.chrono.ISOChronology$Stub.readObject(ISOChronology.java:231)
....
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1044)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1684)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:494)
at net.sf.ehcache.Element.readObject(Element.java:796)
....
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1044)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
at net.sf.ehcache.store.compound.SerializationCopyStrategy.copy(SerializationCopyStrategy.java:45)
... 174 more
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我为 DateTimeZone 类编写了自己的 Provider。这很有帮助
I wrote my own Provider for class DateTimeZone. It was helpful