Salat无法在运行Play框架应用程序中进行序列化,但在控制台中运行良好

时间:2013-04-10 15:45:55

标签: mongodb scala playframework-2.0 salat

我有一个Play 2.1.0(Scala)框架应用程序,我正在尝试使用Salat将我的case类对象转换为MongoDBObjects。当我启动游戏控制台时,实例化我的一个案例类,导入salat._和salat.global._我能够从我的case类转换为MongoDBObject。

当我在播放中处于“运行”模式时,我调用一个调用Actors的页面,而Actors又执行相同的代码从case类转换为MongoDBObject,我得到错误(data.Field是我的全名)案例类):

com.novus.salat.util.GraterGlitch:

  GRATER GLITCH - unable to find or instantiate a grater using supplied path

名称

  REASON: Very strange!  Path='data.Field' from pickled ScalaSig causes Clas

sNotFoundException

  Context: 'global'
  Path from pickled Scala sig: 'data.Field'

在回答这里的另一个问题时,我将scala编译器添加到我的项目的依赖项中,但没有帮助。

令我难以置信的是,这在控制台中可以正常实例化,但在运行完整播放应用时失败。

非常感谢任何帮助。

编辑:将scala编译器添加到依赖项并使用“play start”工作正常。如果我使用“播放运行”,则使用上述错误会失败。任何有关为何有用的见解。

1 个答案:

答案 0 :(得分:3)

根据https://github.com/playframework/Play20/issues/822,这是由动态类加载器引起的。

就我而言,这段代码解决了这个问题。

implicit val ctx = new Context {
  val name = "Custom_Classloader"
}
ctx.registerClassLoader(Play.classloader(Play.current))

另见 https://github.com/novus/salat/wiki/CustomContext