0

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 インターフェイスを作成できることを知っているので、質問は次のとおりです。

  1. 抽象/インターフェースクラスが派生クラスとは異なる netbeans モジュールに存在する派生クラスの JAXB コンテキストを作成することは可能ですか?

  2. もしそうなら、contextPath が両方のモジュールを指すように設定するにはどうすればよいですか?

4

1 に答える 1