返されるのJAXBContext
は、常に単一のプロバイダーからのものです。以下に、プロバイダーがどのように決定されるかを例で示します。
パッケージ #1 - forum17649220.foo
jaxb.properties
このパッケージには、jaxb.properties
MOXy が JAXB プロバイダーであることを示す次のエントリを含むファイルが含まれています ( http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.htmlを参照)。
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
フー
Foo
への参照が含まれていますBar
。JAXBContext
これは、 が処理されるときにがどのように作成されても、 のFoo
メタデータも作成されることを意味しBar
ます。
package forum17649220.foo;
import forum17649220.bar.Bar;
public class Foo {
public Bar bar;
}
jaxb.index
JAXB 実装はパッケージのスキャンを行いません。jaxb.index
ファイルを使用してJAXBContext
、パッケージ名によるの作成を有効にすることができます。
Foo
パッケージ #2 - forum17649220.bar
バー
Bar
への参照が含まれていますFoo
。JAXBContext
これは、 が処理されるときにがどのように作成されても、 のBar
メタデータも作成されることを意味しFoo
ます。
package forum17649220.bar;
import forum17649220.foo.Foo;
public class Bar {
public Foo foo;
}
jaxb.index
Bar
デモコード
JAXBContext
JAXB プロバイダーとして何が選択されているかを確認するために、いくつかの異なる方法のインスタンスを作成します。使用されている JAXB プロバイダーに関係なく、両方のクラスのメタデータが相互に参照されているため、Foo
とhave が処理されることに注意してください。Bar
デモ
package forum17649220;
import javax.xml.bind.JAXBContext;
import forum17649220.bar.Bar;
import forum17649220.foo.Foo;
public class Demo {
public static void main(String[] args) throws Exception {
System.out.println(JAXBContext.newInstance("forum17649220.foo").getClass());
System.out.println(JAXBContext.newInstance("forum17649220.foo:forum17649220.bar").getClass());
System.out.println(JAXBContext.newInstance("forum17649220.bar").getClass());
System.out.println(JAXBContext.newInstance(Foo.class).getClass());
System.out.println(JAXBContext.newInstance(Foo.class, Bar.class).getClass());
System.out.println(JAXBContext.newInstance(Bar.class).getClass());
}
}
出力
入力から、forum17649220.foo
パッケージまたはそのパッケージのクラスが作成時に含まれる場合は常にJAXBContext
、MOXy がjaxb.properties
ファイルのためにプロバイダーになることがわかります。
class org.eclipse.persistence.jaxb.JAXBContext
class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
class org.eclipse.persistence.jaxb.JAXBContext
class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl