在 Java SE 17 中,通过除去 -- 非法访问 标志来增加了 Java 的封装。 除了隐藏 JDK 内部外,这还会阻止一个模块访问未导出的另一个模块的类型。
这可能会导致针对远程 EJB 上的方法调用的参数和返回值的 IIOP 序列化问题,因为必须访问专用字段和方法值。
由于此更改而产生的问题通常会显示为通用 java.rmi.MarshalException。
要解决任何问题,您将需要在发生故障的客户机或服务器上打开任何必需的模块。 缺省情况下, Liberty 会打开多个常用模块。 要查看 Liberty已打开的模块,请查看 wlp/lib/platform/java/java9.options 文件。 应将任何其他开放式语句添加到 jvm.options 文件。 例如:
--add-opens
java.base/java.lang= ALL-未命名
有关这些更改的更多信息,请参阅 JEP 403: 强封装 JDK Internals。