我正在使用Scala 2.11.1和Hazelcast 3.5以及twitter-chill进行序列化
我在服务器(Sbt项目)和客户端(Play2项目)上都有一个用户和序列化程序UserSerializer类
我在Hazelcast中存储User对象, 我的序列化程序在服务器上工作正常,但同一序列化程序的read方法给我异常
这是我的序列化程序
// takes the bytes and converts into User Object (Deserializer)
@throws(classOf[IOException])
override def read(in : ObjectDataInput) : User = {
log.info("*********** Deserializer from Client called ")
val bytes = ByteArrayConverter.getByteArray(in).toByteArray();
log.info("Bytes size: "+bytes.length)
val tryDecode: scala.util.Try[Object] = KryoInjection.invert(bytes)
tryDecode match {
case Success(obj) => log.info(" ------ Success case executed ")
obj.asInstanceOf[User]
case Failure(e) => log.info("------ Failure case executed ")
log.error("deserializer from Client : {}" ,e.printStackTrace())
null
}
}
问题出在这一行
at UserSerializer.read(UserSerializer.scala:44)
这是上述方法中的这一行
val tryDecode: scala.util.Try[Object] = KryoInjection.invert(bytes)
我不知道这是什么问题,因为相同的代码在Hazelcast服务器上正常工作但在客户端出现问题
这是客户端(Play2)的完整堆栈跟踪
17:24:48.822 276580 [play-akka.actor.default-dispatcher-7] UserSerializer INFO - ***********来自客户端的反序列化程序 叫17:24:48.839 276597 [play-akka.actor.default-dispatcher-7] ByteArrayConverter $ INFO - ----对象到字节数组转换器 17:24:48.841 276599 [play-akka.actor.default-dispatcher-7] ByteArrayConverter $ INFO - ----转换现在返回字节 阵列17:24:48.841 276599 [play-akka.actor.default-dispatcher-7] UserSerializer INFO - 字节大小:596 17:24:48.917 276675 [play-akka.actor.default-dispatcher-7] UserSerializer INFO - ------
执行失败案例com.twitter.bijection.InversionFailure:失败 反转:[B @ 1296562 at
com.twitter.bijection.InversionFailure $$ anonfun $ $ partialFailure 1.applyOrElse(InversionFailure.scala:43) 在 com.twitter.bijection.InversionFailure $$ anonfun $ partialFailure $ 1.applyOrElse(InversionFailure.scala:42) 在 scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36) 在scala.util.Failure.recoverWith(Try.scala:203)at com.twitter.bijection.Inversion $ .attempt(Inversion.scala:30)at com.twitter.chill.KryoInjection $ .invert(KryoInjection.scala:29)at at UserSerializer.read(UserSerializer.scala:44) 在 UserSerializer.read(UserSerializer.scala:22) 在 com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:41) 在 com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:276) 在 com.hazelcast.client.spi.ClientProxy.toObject(ClientProxy.java:173) 在com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:131) 在 com.hazelcast.client.proxy.ClientMapProxy.get(ClientMapProxy.java:200) 在
play.api.mvc.ActionBuilder $$ anonfun $ $申请17.apply(Action.scala:464) 在 play.api.mvc.ActionBuilder $$ anonfun $ $申请17.apply(Action.scala:464) 在 play.api.mvc.ActionBuilder $$ anonfun $ $申请16.apply(Action.scala:433) 在 play.api.mvc.ActionBuilder $$ anonfun $ $申请16.apply(Action.scala:432) at play.api.mvc.Action $ .invokeBlock(Action.scala:556)at play.api.mvc.Action $ .invokeBlock(Action.scala:555)at play.api.mvc.ActionBuilder $$ anon $ 1.apply(Action.scala:518)at play.api.mvc.Action $$ anonfun $ $申请1 $$ anonfun $ $应用4 $$ anonfun $ $申请5.apply(Action.scala:130) 在 play.api.mvc.Action $$ anonfun $ $申请1 $$ anonfun $ $应用4 $$ anonfun $ $申请5.apply(Action.scala:130) at play.utils.Threads $ .withContextClassLoader(Threads.scala:21)at at play.api.mvc.Action $$ anonfun $ $申请1 $$ anonfun $ $适用4.适用(Action.scala:129) 在 play.api.mvc.Action $$ anonfun $ $申请1 $$ anonfun $ $申请4.适用(Action.scala:128) 在scala.Option.map(Option.scala:146)at play.api.mvc.Action $$ anonfun $ apply $ 1.apply(Action.scala:128)at at play.api.mvc.Action $$ anonfun $ apply $ 1.apply(Action.scala:121)at at play.api.libs.iteratee.DoneIteratee $$ anonfun $ MAPM $ 2.适用(Iteratee.scala:705) 在 play.api.libs.iteratee.DoneIteratee $$ anonfun $ MAPM $ 2.适用(Iteratee.scala:705) 在 scala.concurrent.impl.Future $ PromiseCompletingRunnable.liftedTree1 $ 1(Future.scala:24) 在 scala.concurrent.impl.Future $ PromiseCompletingRunnable.run(Future.scala:24) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41)at akka.dispatch.ForkJoinExecutorConfigurator $ AkkaForkJoinTask.exec(AbstractDispatcher.scala:393) 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339) 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 引起:com.esotericsoftware.kryo.KryoException:无法找到 class:用户在 com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138) 在 com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115) 在com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:610)at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:721)at at com.twitter.chill.SerDeState.readClassAndObject(SerDeState.java:61) 在com.twitter.chill.KryoPool.fromBytes(KryoPool.java:94)at com.twitter.chill.KryoInjection $$ anonfun $反转$ 1.适用(KryoInjection.scala:30) 在 com.twitter.chill.KryoInjection $$ anonfun $反转$ 1.适用(KryoInjection.scala:30) 在 com.twitter.bijection.Inversion $$ anonfun $尝试$ 1.适用(Inversion.scala:30) 在scala.util.Try $ .apply(Try.scala:192)... 36更多引起: java.lang.ClassNotFoundException:用户来自 java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:348)at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:136) ... 45更多17:24:48.942 276700 [play-akka.actor.default-dispatcher-7] UserSerializer ERROR - 来自客户的反序列化器:()