English 中文(简体)
如果尝试将 JsonPut & JsonPost 方法添加到使用相同路径的休息帮助者类, 则无法编译代码
原标题:Cannot compile code if try to add JsonPut & JsonPost method in RestHelper class with the same path

我正试图将 JsonPut & amp; JsontPost 方法添加到休息助手类中, 其路径与钟声相同 :

object MembershipAPI extends RestHelper with LogHelper {
  serve {
    case JsonPost("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request) =>
      () => Full(GroupMembershipController.Join(group_id, user_id, request))
    case JsonPut("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request) =>
      () => Full(GroupMembershipController.Join(group_id, user_id, request))
    case JsonDelete("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request) =>
      () => Full(GroupMembershipController.Leave(group_id, user_id, request))
  }
}

当运行 sbt 编译时, 我得到这个错误 :

java.lang.Error: ch.epfl.lamp.fjbg.JCode$OffsetTooBigException: offset too big to fit in 16 bits: 51511
    at ch.epfl.lamp.fjbg.JFieldOrMethod.writeTo(JFieldOrMethod.java:130)
    at ch.epfl.lamp.fjbg.JClass.writeTo(JClass.java:358)
    at scala.tools.nsc.backend.jvm.BytecodeWriters$ClassBytecodeWriter$class.writeClass(BytecodeWriters.scala:87)
    at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase$$anon$2.writeClass(GenJVM.scala:82)
    at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator.emitClass(GenJVM.scala:172)
    at scala.tools.nsc.backend.jvm.GenJVM$BytecodeGenerator.genClass(GenJVM.scala:304)
    at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase$$anonfun$run$4.apply(GenJVM.scala:86)
    at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase$$anonfun$run$4.apply(GenJVM.scala:86)
    at scala.collection.mutable.HashMap$$anon$2$$anonfun$foreach$3.apply(HashMap.scala:102)
    at scala.collection.mutable.HashMap$$anon$2$$anonfun$foreach$3.apply(HashMap.scala:102)
    at scala.collection.Iterator$class.foreach(Iterator.scala:652)
    at scala.collection.mutable.HashTable$$anon$1.foreach(HashTable.scala:157)
    at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:190)
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:43)
    at scala.collection.mutable.HashMap$$anon$2.foreach(HashMap.scala:102)
    at scala.tools.nsc.backend.jvm.GenJVM$JvmPhase.run(GenJVM.scala:86)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:949)
    at scala.tools.nsc.Global$Run.compile(Global.scala:1034)
    at xsbt.CompilerInterface.run(CompilerInterface.scala:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at xsbt.AnalyzingCompiler.call(AnalyzingCompiler.scala:40)
    at xsbt.AnalyzingCompiler.apply(AnalyzingCompiler.scala:18)
    at sbt.Compile.processScala(Compile.scala:76)
    at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
    at sbt.CompilerCore$$anonfun$1.apply(Compile.scala:27)
    at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
    at sbt.CompilerCore$$anonfun$process$1$1.apply(Compile.scala:22)
    at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:45)
    at sbt.CompilerCore$$anonfun$doCompile$3.apply(Compile.scala:42)
    at scala.Option.orElse(Option.scala:102)
    at sbt.CompilerCore.doCompile(Compile.scala:41)
    at sbt.CompilerCore.apply(Compile.scala:29)
    at sbt.AbstractCompileConditional.run$1(Conditional.scala:341)
    at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:344)
    at sbt.AbstractCompileConditional$$anonfun$3.apply(Conditional.scala:344)
    at sbt.classfile.Analyze$.apply(Analyze.scala:110)
    at sbt.AbstractCompileConditional.execute(Conditional.scala:344)
    at sbt.Conditional$class.run(Conditional.scala:43)
    at sbt.AbstractCompileConditional.run(Conditional.scala:231)
    at sbt.BasicScalaProject.sbt$BasicScalaProject$$doCompile(DefaultProject.scala:260)
    at sbt.BasicScalaProject$$anonfun$compileAction$1.apply(DefaultProject.scala:274)
    at sbt.BasicScalaProject$$anonfun$compileAction$1.apply(DefaultProject.scala:274)
    at sbt.TaskManager$Task.invoke(TaskManager.scala:62)
    at sbt.impl.RunTask.doRun$1(RunTask.scala:77)
    at sbt.impl.RunTask.runTask(RunTask.scala:85)
    at sbt.impl.RunTask.run(RunTask.scala:32)
    at sbt.impl.RunTask$.apply(RunTask.scala:17)
    at sbt.impl.RunTask$.apply(RunTask.scala:16)
    at sbt.Project$class.run(Project.scala:98)
    at sbt.Project$class.act(Project.scala:129)
    at sbt.BasicScalaProject.act(DefaultProject.scala:21)
    at sbt.xMain$$anonfun$8.apply(Main.scala:530)
    at sbt.xMain$$anonfun$8.apply(Main.scala:530)
    at sbt.xMain.withAction(Main.scala:563)
    at sbt.xMain.sbt$xMain$$handleAction(Main.scala:530)
    at sbt.xMain.handleCommand(Main.scala:520)
    at sbt.xMain.processAction(Main.scala:459)
    at sbt.xMain.process$1(Main.scala:257)
    at sbt.xMain.processArguments(Main.scala:266)
    at sbt.xMain.startProject(Main.scala:107)
    at sbt.xMain.run(Main.scala:84)
    at sbt.xMain.run0$1(Main.scala:35)
    at sbt.xMain.run(Main.scala:42)
    at xsbt.boot.Launch$.run(Launch.scala:53)
    at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
    at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42)
    at xsbt.boot.Launch$.launch(Launch.scala:57)
    at xsbt.boot.Launch$.explicit(Launch.scala:42)
    at xsbt.boot.Launch$.initialized(Launch.scala:38)
    at xsbt.boot.Launch$.parsed(Launch.scala:31)
    at xsbt.boot.Launch$.configured(Launch.scala:21)
    at xsbt.boot.Launch$.apply(Launch.scala:16)
    at xsbt.boot.Launch$.apply(Launch.scala:13)
    at xsbt.boot.Boot$.runImpl(Boot.scala:24)
    at xsbt.boot.Boot$.run(Boot.scala:19)
    at xsbt.boot.Boot$.main(Boot.scala:15)
    at xsbt.boot.Boot.main(Boot.scala)
Caused by: ch.epfl.lamp.fjbg.JCode$OffsetTooBigException: offset too big to fit in 16 bits: 51511
    at ch.epfl.lamp.fjbg.JCode.checkOffset16(JCode.java:903)
    at ch.epfl.lamp.fjbg.JCode.patchAllOffset(JCode.java:982)
    at ch.epfl.lamp.fjbg.JCode.freeze(JCode.java:102)
    at ch.epfl.lamp.fjbg.JMethod.freeze(JMethod.java:89)
    at ch.epfl.lamp.fjbg.JFieldOrMethod.writeTo(JFieldOrMethod.java:127)
    ... 79 more
Error during sbt execution: java.lang.Error: ch.epfl.lamp.fjbg.JCode$OffsetTooBigException: offset too big to fit in 16 bits: 51511

我不知道为什么会发生,如何解决这个问题?

提前感谢您!

问题回答

创建的部分函数太大, Scala 编译器无法编译。 它是一个 < a href=" https://issues.scala- lang. org/browse/SI-1133" rel=“ nofollow” >issues 与 scala 编译器连接。

要围绕问题工作, 您需要将选择者分成多个服务语句。 所以只要找到一个有逻辑中断的地方, 并设定两个 RestHelper 函数 。

例如,

object MembershipAPIOne extends RestHelper with LogHelper {
  serve {
   case JsonPost("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request)    =>
   () => Full(GroupMembershipController.Join(group_id, user_id, request))
   case JsonPut("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request) =>
  () => Full(GroupMembershipController.Join(group_id, user_id, request))
  }
 }

object MembershipAPITwo extends RestHelper with LogHelper {
  serve {
case JsonDelete("api" :: "v1" :: "group_memberships" :: group_id :: user_id :: Nil, request) =>
  () => Full(GroupMembershipController.Leave(group_id, user_id, request))
 }
}

http://www.assembla.com/spaces/liftweb/wiki/REST_Web_services ,以获得更多帮助。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签