2009-08-21 63 views
0

當試圖在servlet內部創建新的JAXB實例時,我收到一個JAXBException,表示無法找到jaxb.properties。我一直試圖通過調用JAXBContext.newInstance()來顯式傳遞類裝載器,但我無法弄清楚。幫助在Oracle企業管理器中創建新的JAXB實例

下面是類裝載器:

servlet classloader: oc4j:10.1.3 
servlet parent classloader:  api:1.4.0 
this classloader: RestTest.web.ExampleWebApp:0.0.0 
this classloader parent: RestTest.root:0.0.0 

的JAXB生成類是在不同的包,所以我的servlet是在包「com.xyz.ws」和JAXB類是在包「融爲一體。 abc.123" 。我從servlet創建新JAXB實例與`

JAXBContext.newInstance("com.abc.123", servletClassLoader) 

回答

0

看來這樣可以解決問題(發現here):

步驟1:將JAXB 2.0開始罐子複製到d:\ dev的\ oc4j10.1.3.0.0 \ J2EE \家\ applib(d: \ dev \ oc4j10.1.3.0.0是我的oc4j安裝位置) (j2ee \ home \ applib這個目錄是所有項目的共用庫文件的佔位符(已部署的應用程序) 已添加的文件是 jaxb-api-2.0.jar ,jaxb-impl-2.0.jar,jsr173_api-1.0.jar(JAXB2.0罐可以在http://jaxb.java.net/找到)

第2步:當deplo應用程序通過企業管理器(WebBrowser)更改部署計劃。

2.1您可以通過單擊按鈕來編輯部署計劃,以更改depolyment最後一步(屏幕)上的depolyOment計劃。

2.2單擊按鈕應用程序特定屬性顯示。選擇鏈接importedLibraries(Edit importedLibraries),然後單擊編輯刪除鏈接輸入名稱oracle.xml,然後單擊繼續並完成部署。

錯誤的原因是xml.jar(JAXB 1.0),這是存在於變量名oracle.xml(請參閱企業管理器 - >管理 - >共享庫共享libaray。

我們從上方取得什麼步驟是刪除我們的應用程序的默認(舊版本的JAXB),並強制OC4J讀取較新的JAXB2.0實現(罐子)

1

那麼有沒有在com.abc.123包jaxb.properties文件(我也使用this.getClass().getClassLoader()試過)? JAXB需要一個構建上下文。

+0

我正在使用JAXB 2.1(在/ WEB-INF/lib文件夾中),它不是應該需要一個jaxb.properties,但也許oc4j庫使用JAXB 1.0並且有衝突,我將不得不考慮它。 – ravun 2009-08-21 13:49:37