Чтобы указать EclipseLink MOXy в качестве провайдера JAXB, вам нужно поместить jaxb.properties в один из пакетов для ваших доменных объектов, то есть , переданный в , для начальной загрузки JAXBContext.Например, если ваш JAXBContext будет основан на следующих 2 классах:
- example.foo.Foo
- example.bar.Bar
example.foo.Foo
package example.foo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import example.bar.Bar;
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
private Bar bar;
}
example.bar.Bar
package example.bar;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import example.foo.Foo;
@XmlAccessorType(XmlAccessType.FIELD)
public class Bar {
private Foo foo;
}
example / foo / jaxb.properties
Чтобы указать, что следует использовать реализацию JAXB для MOXy, мы поместим файл jaxb.properties со следующей записью в тот же пакет, что и класс Foo.
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Demo
Поскольку классы Foo и Bar ссылаются друг на друга, в конечном итоге JAXBContext будет содержать метаданные об их обоих, но в зависимости от того, как мы создаем JAXBContext, поставщик может отличаться.
package example;
import javax.xml.bind.JAXBContext;
import example.foo.Foo;
import example.bar.Bar;
public class Demo {
public static void main(String[] args) throws Exception{
System.out.println(JAXBContext.newInstance(Foo.class).getClass());
System.out.println(JAXBContext.newInstance(Bar.class).getClass());
System.out.println(JAXBContext.newInstance(Foo.class, Bar.class).getClass());
}
}
Запуск вышеуказанного кода приведет к:
class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
class org.eclipse.persistence.jaxb.JAXBContext