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