2013-07-15 79 views
0

我在我的項目中爲某些類實現了Moxy。但我不希望Moxy成爲所有現有類的默認值。但是我面臨的問題是Moxy正在用於所有其他現有的類。我怎樣才能避免這種情況?Moxy類路徑問題

我已經確定jaxb.properties與我希望它用於的類在同一個包中,並且沒有其他類。我的包裝結構是這樣的:

package:com.entity.a com.entity.b com.entity.c com.entity.d com.entity.d.moxy。

jaxb.properties存在於com.entity.d.moxy中,com.entity.d.moxy中的所有類都只應用它。但是,所有的課程都在採用moxy並導致例外。

任何人都可以幫忙嗎?

+0

歡迎來到Stack Overflow!您不必在帖子中包含簽名 - 您的用戶卡始終自動發佈在帖子的底部。 – Artemix

回答

0

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.in​​dex

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.in​​dex

Bar 

演示代碼

我們將創建的JAXBContext幾種不同的方式實例來看看什麼是拿起作爲JAXB提供者。請注意,因爲FooBar具有彼此的引用,所以無論使用哪個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