Как сохранить используемые интерфейсы в классах, с которыми я хочу использовать привязку 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 держал BImpl вместо B, а получатель возвращал BImpl, а установщик получал BImpl. Это очень неправильно, так как полностью нарушает интерфейс.
Как я могу решить это? У меня были проблемы с истерикой (реальная проблема гораздо сложнее, а сообщения о загадочных ошибках JiBX не помогают) - ничего не помогло.
Это разрешимо? Действительно ли JiBX настолько навязчив (в том смысле, что от меня требуется отказаться от программирования всех интерфейсов?)
Пожалуйста, не отвечайте "используйте AbstractB", так как это та же проблема, только один уровень удален.