0

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

私は datanucleus(DN) と datanucleus maven plugin(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)
4

1 に答える 1

0

明らかに、DN v1.1 を使用している場合は、DN M2 プラグイン v1.1 (エンハンサー v1.1 を使用) を使用する必要があります。言うまでもなく、現在のバージョンのみを「サポート」しており、どちらもそのカテゴリには含まれていません

于 2010-11-10T18:41:20.423 に答える