Указание среды выполнения MOXy для нескольких пакетов Java - PullRequest
3 голосов
/ 03 мая 2011

Есть ли способ указать MOXy в качестве моей реализации JAXB для классов домена, распределенных по нескольким пакетам Java, кроме помещения jaxb.properties в каждый отдельный пакет?

1 Ответ

3 голосов
/ 03 мая 2011

Чтобы указать 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
...