【问题标题】:java.lang.VerifyError after running the DataNucleus Enhancer运行 DataNucleus Enhancer 后的 java.lang.VerifyError
【发布时间】:2010-11-10 16:39:56
【问题描述】:

我在运行 datanucleus 增强器后出现了一个奇怪的行为。然后尝试生成EntityManagerFactory,我跑了一个java.lang.VerifyError,就是

 method: setItem signature: (Ljava/lang/Object;)V) Incompatible argument to function" type="java.lang.VerifyError">java.lang.VerifyError: (class: de/suur/wr/generated/FlagType$FlagTypeRemoveFlagsItem, method: setItem signature: (Ljava/lang/Object;)V) Incompatible argument to function

方法的原始声明为:

    public void setItem(String value) {
        this.item = value;
    }

我发现 java 在字节码中添加了一些合成桥接方法,这确实与错误匹配(见下文)。但通常这种方法可以和平共处。也许这个错误根本与增强器无关,但是我没有其他直觉认为它是相关的。 可能是什么原因?

  // Method descriptor #53 (Ljava/lang/Object;)V
  // Stack: 2, Locals: 2
  public bridge synthetic void setItem(java.lang.Object arg0);
  0  aload_0 [this]
  1  aload_1 [arg0]
  2  checkcast java.lang.String [54]
  5  invokevirtual    de.suur.wr.generated.FlagType$FlagTypeRemoveFlagsItem.setItem(java.lang.String) : void [56]
  8  return
  Line numbers:
    [pc: 0, line: 1]

和原来的方法:

 // Method descriptor #36 (Ljava/lang/String;)V
 // Stack: 2, Locals: 2
 public void setItem(java.lang.String value);
  0  aload_0 [this]
  1  aload_1 [value]
  2  putfield de.suur.wr.generated.FlagType$FlagTypeRemoveFlagsItem.item : java.lang.String [33]
  5  return
  Line numbers:
    [pc: 0, line: 314]
    [pc: 5, line: 315]
  Local variable table:
    [pc: 0, pc: 6] local: this index: 0 type: de.suur.wr.generated.FlagType.FlagTypeRemoveFlagsItem
    [pc: 0, pc: 6] local: value index: 1 type: java.lang.String

我在 servile 组合中使用了 datanucleus(DN) 和 datanucleus maven 插件(DNM2): (DN,DNM2) 1.1.4 , 2.0.0 和 2.1.1, 2.1.1 。堆栈跟踪是

    at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getJavaBeanAccessorAnnotationsForClass(AbstractAnnotationReader.java:238)

【问题讨论】:

    标签: java datanucleus


    【解决方案1】:

    显然,如果使用 DN v1.1,那么您应该使用 DN M2 插件 v1.1(它使用增强器 v1.1)。不用说,我们只“支持”当前版本,而且这些都不属于该类别

    【讨论】:

    • 嗯,我也是这么想的,然后我尝试了不同的版本,效果一样,所以最后我用DNv.1.1.4和DN M2v1.1.4重试。 , 和 2.1.1 (DN M2 和 DN) 一样。
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2011-10-12
    相关资源
    最近更新 更多