在 Java SE 17 中,已透過移除 --illegal-access 旗標來增加 Java 的封裝。除了隱藏 JDK 內部套件之外,這也會阻止一個模組存取未匯出的另一個模組類型。這可能會導致遠端 EJB 上方法呼叫的參數及回覆值發生 IIOP 序列化問題,因為必須存取專用欄位及方法值。
由於此變更而產生的問題通常會顯示為一般 java.rmi.MarshalException。
若要修正任何問題,您將需要在發生失敗的用戶端或伺服器上開啟任何必要的模組。依預設,Liberty 會開啟數個常用的模組。若要查看已由 Liberty 開啟的模組,請在 wlp/lib/platform/java/java9.options 檔中尋找。任何其他開啟的陳述式皆應該新增至 jvm.options 檔。例如:
--add-opens
java.base/java.lang=ALL-UNNAMED
如需這些變更的相關資訊,請參閱 JEP 403:強力封裝 JDK 內部套件。