为多个Java包指定MOXy运行时

时间:2011-05-02 21:53:39

标签: java jaxb eclipselink moxy

有没有办法将MOXy指定为我的JAXB实现,对于分布在多个Java包中的域类,除了将jaxb.properties放入每个包中之外?

1 个答案:

答案 0 :(得分:3)

要将EclipseLink MOXy指定为JAXB提供程序,您需要将jaxb.properties放入域对象的其中一个包中,即传入以引导JAXBContext。例如,如果您的JAXBContext将基于以下两个类:

  • 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;

}

示例/富/ jaxb.properties

要指定应该使用JAXB的MOXy实现,我们将把一个带有以下条目的jaxb.properties文件放在与Foo类相同的包中。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

<强>演示

由于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