檢查 JAXB 環境定義 Factory 起始設定類別

此規則與從 WebSphere Application Server 7.0 之前的各版本進行移轉時所發生的「Java XML 連結架構 (JAXB)」起始設定類別變更和衝突相關。 有兩個 JAXB 移轉實務會使客戶應用程式發生問題。 第一個與從 WebSphere 6.1 Feature Pack for Web Services 移轉的應用程式相關。 第二個實務與包裝了 JAXB 實作且已移轉至 WebSphere 7.0 版或更新版本的客戶應用程式相關。

在 WebSphere 7.0 版中,Java 6 執行時期提供了 JAXB 2.1。 在 7.0 版之前,WebSphere 6.1 Feature Pack for Web Services 提供 JAXB 2.0,所用的起始設定類別與 JAXB 2.1 或 2.2(8.0 版)不同。 如果應用程式指定使用舊的起始設定類別,執行應用程式時,有可能產生找不到類別的異常狀況。 起始設定類別可以利用 javax.xml.bind.context.factory 內容來定義。 舊的起始設定類別是 com.sun.xml.bind.ContextFactory。 如果 javax.xml.bind.context.factory 內容設定了舊類別名稱,當使用 Java 6 所提供的 JAXB 程式庫時,會出現 java.lang.ClassNotFoundException

此規則會掃描用來取得 JAXBContextjavax.xml.bind.JAXBContext.newInstance 方法。 如果您使用 JAXB,您應該檢查您的應用程式是否使用舊的環境定義 Factory。 另外,此規則也會偵測 Java 程式碼中的字串文字 "com.sun.xml.bind.ContextFactory" 或 "com.sun.xml.bind.DefaultJAXBContextImpl",但它不會掃描通常會設定這些值的內容檔。 它們也可以在 Java 系統內容上設定。

JAXB 內容通常是從 jaxb.properties 檔載入。 請手動掃描您的應用程式內容檔來判斷是否定義了舊的環境定義 Factory。

若要掃描 Eclipse 中的內容檔,請選取搜尋 > 檔案 ...。 在包含文字欄位中,輸入 com.sun.xml.bind.ContextFactory。 在檔名型樣欄位中,輸入 *.properties。 請重複搜尋,尋找 com.sun.xml.bind.DefaultJAXBContextImpl 字串。

當在 WebSphere 第 7 或 8 版中使用 JAXB 時,如果沒有設定 javax.xml.bind.context.factory 內容,預設起始設定類別是 com.ibm.xml.xlxp2.jaxb.JAXBContextFactory

在第二個實務中,客戶在他們第 7 版之前的應用程式中包裝了 JAXB 實作,當移轉至 WebSphere 7.0 版或更新的版本時,也可能會發生剛才說明的問題,或發生行為變更。 當載入 Java 執行時期所提供的 JAXB 2.1 或 2.2 版,而不是應用程式所提供的 JAXB 實作時,就會出現這個情況。 如果您想要繼續使用您的 JAXB 實作,在 WebSphere Application Server 第 7 版中啟用協力廠商 JAX-WS 應用程式一文說明如何暫時解決類別載入器問題。

如需相關資訊,請參閱下列參照