JiBXバインディングを使用したいクラスでインターフェイスを使用し続けるにはどうすればよいですか?
例:Javaでこの非常に単純なモデルがあります:
public interface A {
B getB();
void setB(B b);
}
public interface B {
String getData();
void setData(String data);
}
public class AImpl implements A {
B b;
@Override
public B getB() {
return b;
}
@Override
public void setB(B b) {
this.b = b;
}
}
public class BImpl implements B {
private String data;
@Override
public String getData() {
return data;
}
@Override
public void setData(String data) {
this.data = data;
}
}
そして、この拘束力のある文書:
<binding>
<mapping name="A"
class="com.test.AImpl">
<structure name="B" usage="optional" get-method="getB" set-method="setB"/>
</mapping>
<mapping name="B"
class="com.test.BImpl">
<value name="data" set-method="setData" get-method="getData" usage="optional"/>
</mapping>
</binding>
コードを実行しようとすると、次の例外が発生します。
java.lang.ClassFormatError:クラスcom / test / Bのメソッドに不正な修飾子があります:0x1001
両方のマッピングで'abstract= "true"'を使用しようとしましたが、次の例外が発生しました。
...原因:org.jibx.runtime.JiBXException:クラスcom.test.Aのバインディング情報にアクセスできません。バインディングがコンパイルされていることを確認してください...
私が見つけた唯一の解決策は、AImplにBではなくBImplを保持させ、ゲッターにBImplを返し、セッターにBImplを受信させることです。これは、インターフェイスを完全に破壊するため、非常に間違っています。
どうすればこれを解決できますか?私は髪の毛を抜いて、タントラムを持っています(実際の問題ははるかに複雑で、JiBXの不可解なエラーメッセージは役に立ちません)-何も役に立ちません。
これは解決可能ですか?JiBXは本当にそれほど煩わしいですか(すべてのインターフェイスプログラミングを放棄する必要があるという点で?)
同じ問題であり、1つのレベルのみが削除されているため、「AbstractBを使用」とは答えないでください。