Возвращенный 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. Обратите внимание, что поскольку Foo
и Bar
имеют ссылки друг на друга, метаданные для обоих классов будут обрабатываться независимо от используемого провайдера JAXB.
Демо
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
person
bdoughan
schedule
15.07.2013