2 つのモジュール A と B を含む netbeans 8.1 プラットフォーム アプリケーションがあります。どちらにも、JAXB を使用して XML との間でマーシャリング/アンマーシャリングされる Java クラスが含まれています。
A には、それ自体がインターフェイスを含む抽象クラスが含まれています。
@XmlAccessorType(value = XmlAccessType.FIELD)
abstract public class myAbstractClass {
public interface myInterface {
public void method();
}
}
B には、この抽象クラスの拡張とそのメンバー インターフェイスが含まれています。
import path.to.myAbstractClass;
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlRootElement(name = "mypackage-myextendedclass")
public class myExtendedClass extends myAbstractClass {
public class mySubClass implements myInterface {
@Override
public void method()
{
// do some stuff
return;
}
}
}
JAXBContext
次のように、B のインスタンスをマーシャリングするために a を作成しようとしています。
JAXBContext context = JAXBContext.newInstance("A.AbstractClassPackage", B.myExtendedClass.getClassLoader());
A.AbstractClassPackage は、モジュール A が存在するパッケージです。
上記のように JAXBContext を作成しようとすると、インターフェイスをマーシャリングしようとしているというエラーが表示され、JAXB はインターフェイスを処理できません - 次のように:
JAXB が「xxx はインターフェースであり、JAXB はインターフェースを処理できない」と言うのはなぜですか。生成されたクラスはインターフェースではありませんが
私のエラーは実際にはインターフェイス myInterface を参照しているため、何らかの理由で JAXB が myExtendedClass ではなく myAbstractClass のコンテキストを作成しようとしていると思います。これは、contextPath (メソッドの引数 1 JAXBContext.newInstance
) が間違っているためだと思います。
派生クラスが同じモジュールに存在する場合、派生クラスの JAXB インターフェイスを作成できることを知っているので、質問は次のとおりです。
抽象/インターフェースクラスが派生クラスとは異なる netbeans モジュールに存在する派生クラスの JAXB コンテキストを作成することは可能ですか?
もしそうなら、contextPath が両方のモジュールを指すように設定するにはどうすればよいですか?