此規則與從 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。
此規則會掃描用來取得 JAXBContext 的 javax.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 應用程式一文說明如何暫時解決類別載入器問題。
如需相關資訊,請參閱下列參照