JAXBContext
返回将始终来自单个提供者。下面我将演示如何使用示例确定提供者。
PACKAGE#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
的参考。这意味着无论在处理Foo
时如何创建JAXBContext
元数据也将为Bar
创建。
package forum17649220.foo;
import forum17649220.bar.Bar;
public class Foo {
public Bar bar;
}
jaxb.index
JAXB实现不做包扫描。可以使用jaxb.index
文件通过软件包名称创建JAXBContext
。
Foo
PACKAGE#2 - forum17649220.bar
酒吧
Bar
包含Foo
参考。这意味着无论在处理Bar
时如何创建JAXBContext
元数据也将为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
欢迎来到Stack Overflow!您不必在帖子中包含签名 - 您的用户卡始终自动发布在帖子的底部。 – Artemix