使用Play2和Scala 2.11.1在twitter / chill中反序列化异常

时间:2015-09-03 12:46:43

标签: scala serialization playframework-2.3 kryo

我正在使用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 -   来自客户的反序列化器:()

0 个答案:

没有答案
相关问题