对于分布在多个MOXy包中的域类,有没有办法将jaxb.properties
指定为我的JAXB实现,而不是将jaxb.properties
放到每个包中?
发布于 2011-05-03 06:54:17
要将EclipseLink MOXy指定为JAXB提供者,您需要在域对象的一个包中放置一个jaxb.properties,即传入的以引导JAXBContext。例如,如果您的JAXBContext将基于以下两个类:
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
演示
由于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
https://stackoverflow.com/questions/5862896
复制相似问题