Salat在运行游戏框架应用程序中序列化失败,但在控制台工作正常



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

当我在"运行"模式在发挥,我调用一个页面调用演员,这反过来执行相同的代码转换从case类MongoDBObject,我得到错误(数据)。字段是case类的全名):

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"工作正常。如果我使用"play run",它就会因为上面的错误而失败。如果你能告诉我为什么,我会很有帮助的。

根据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

相关内容

  • 没有找到相关文章

最新更新