使用 Java 和元模型时出现异常 java.lang.ClassCastException: javassist.bytecode.InterfaceMethodrefInfo cannot

Posted

技术标签:

【中文标题】使用 Java 和元模型时出现异常 java.lang.ClassCastException: javassist.bytecode.InterfaceMethodrefInfo cannot【英文标题】:exception when working with Java and metamodels java.lang.ClassCastException: javassist.bytecode.InterfaceMethodrefInfo cannot 【发布时间】:2017-03-18 22:52:02 【问题描述】:

我无法运行我的 Play java 应用程序我做的最后一件事是修改元模型和对实体类关系的一些小改动,以前有人遇到过这个问题吗?

我不太明白,因为这个问题没有说明我的代码,有什么建议吗?

java.lang.ClassCastException:javassist.bytecode.InterfaceMethodrefInfo 无法转换为 javassist.bytecode.MethodrefInfo 在 javassist.bytecode.ConstPool.getMethodrefType(ConstPool.java:452) 在 javassist.bytecode.stackmap.Tracer.doInvokeMethod(Tracer.java:800) 在 javassist.bytecode.stackmap.Tracer.doOpcode148_201(Tracer.java:597) 在 javassist.bytecode.stackmap.Tracer.doOpcode(Tracer.java:81) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:187) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:199) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:164) 在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:108) 在 javassist.bytecode.MethodInfo.rebuildStackMap(MethodInfo.java:423) 在 javassist.bytecode.MethodInfo.rebuildStackMapIf6(MethodInfo.java:405) 在 javassist.expr.ExprEditor.doit(ExprEditor.java:113) 在 javassist.CtBehavior.instrument(CtBehavior.java:712) 在 play.core.enhancers.PropertiesEnhancer.rewriteAccess(PropertiesEnhancer.java:156) 在 play.PlayCommands$$anonfun$PostCompile$1$$anonfun$9.apply(PlayCommands.scala:99) 在 play.PlayCommands$$anonfun$PostCompile$1$$anonfun$9.apply(PlayCommands.scala:99) 在 scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264) 在 scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 在 scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47) 在 scala.collection.TraversableLike$class.filter(TraversableLike.scala:263) 在 scala.collection.AbstractTraversable.filter(Traversable.scala:105) 在 play.PlayCommands$$anonfun$PostCompile$1.apply(PlayCommands.scala:99) 在 play.PlayCommands$$anonfun$PostCompile$1.apply(PlayCommands.scala:76) 在 scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35) 在 scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34) 在 scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 在 sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) 在 sbt.std.Transform$$anon$4.work(System.scala:64) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 在 sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 在 sbt.Execute.work(Execute.scala:244) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 在 sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) 在 sbt.CompletionService$$anon$2.call(CompletionService.scala:30) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

代码:

@OneToMany(mappedBy = "user") 公共列表替代;

@OneToMany(mappedBy = "user")
public List<Employee> employee;

public static volatile ListAttribute<User, Substitute> substitute;
public static volatile ListAttribute<User, Employee> employee;

listAttribute 曾经是singularatrribute,但我从onetoone 更改为onetomany 关系后需要更改它们

【问题讨论】:

代码在哪里? 我添加了我更改的sn-ps @javaguy 【参考方案1】:

这由使用 Javaassist 3.18.0-GA 版本的 sbt-play-enhancer 插件实现。

参考:https://github.com/playframework/playframework/issues/3374

将 3.20 javassist 升级添加到 project/plugins.sbt

libraryDependencies += "org.javassist" % "javassist" % "3.20.0-GA"

【讨论】:

以上是关于使用 Java 和元模型时出现异常 java.lang.ClassCastException: javassist.bytecode.InterfaceMethodrefInfo cannot的主要内容,如果未能解决你的问题,请参考以下文章

在 IDEA 终端中运行激活器命令时出现 java.lang.NoClassDefFoundError

华为机器学习套件下载模型时出现异常

使用 Java 编译器 API 时出现空指针异常

在 Java 中使用 TESSERACT API 时出现 java.lang.UnsatisfiedLinkError 异常

尝试从 maven 运行 java 程序时出现异常

在 Java 中读取 protobuf 消息时出现异常