2011-06-06 19 views
2

我正在使用JAXB版本2.我使用的是Sun版本,因此我可以使用替換不符合標準實現的名稱空間。當我的類位於應用程序的相同包中並且jaxb.properties文件與模型類一起時,這一切都可以正常工作。JAR文件中的jaxb.properties

當我將這些全部移到一個單獨的lib,一個jar文件時,則名稱空間替換無法正常工作,並且所有名稱空間在編組上仍然是ns1。所以對我來說,它看起來沒有選擇在我的jaxb.properties文件中定義的上下文工廠定義,並默認爲標準的Java版本。

沒有發現jaxb.properties異常拋出。

任何想法可能會發生什麼或如何解決它? 感謝您的閱讀。

回答

2

因爲這是我的JAR文件的問題。 我已經將package-info.java複製到構建中的JAR中,但未複製已編譯的package-info.class。

包括package-info.java和。班級已經解決了這個問題。

感謝您的閱讀,並非常感謝您的答覆。

1

你有沒有試過把它放在jar文件的META-INF/services目錄中?

+0

試過,不使我害怕,好建議,但由於任何區別。 – Gurnard 2011-06-06 13:46:31

+0

對不起,它沒有工作。當我無法弄清我的文件是否被拾取時,我使用的一種策略是故意破壞它,並查看是否拋出異常。 – artbristol 2011-06-06 13:47:58

+1

有一點需要注意的是,META-INF/services方法將爲使用該類路徑的所有人更改默認的JAXB impl,而不僅僅是應用程序。這比可以更改單個模型的JAXB提供程序的jaxb.properties有更大的影響。 – 2011-06-06 14:09:37

3

您的安裝

當我將這些所有獨立 lib下,一個jar文件,然後更換名稱空間 無法正常使用,所有 命名空間繼續成爲一個 元帥NS1。

在這個設置中你有模型類和jaxb.properties在同一個jar文件?您需要確保jaxb.properties仍然在同一個包你的模型類:

  • COM \例子\讓Foo.class
  • COM \例子\ Bar.class
  • COM \實例\ jaxb.properties

沒有jaxb.properties未發現 拋出異常。

您的jaxb.properties被找到了嗎?

沒有異常時,拋出jaxb.properties文件不存在,因爲JAXB運行時只會默認爲JAXB IMPL(無論是RI,或通過META-INF/services機制中的一個定義,你可以測試是否是尋找你的jaxb.properties文件通過而無效JAXBContextFactory項,這將創建一個類似的異常:

javax.xml.bind.context.factory的= INVALID_ENTRY

會導致以下異常:

Exception in thread "main" javax.xml.bind.JAXBException 
- with linked exception: 
[java.lang.ClassNotFoundException: INVALID_ENTRY] 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:187) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:331) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522) 
    at forum22.Demo.main(Demo.java:10) 
Caused by: java.lang.ClassNotFoundException: INVALID_ENTRY 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185) 
    ... 4 more