Java8迁移至Java17后GemFire PDX序列化异常,求替代--add-opens方案
Java 8 迁移至 Java 17 时 GemFire PDX 序列化
java.lang.string.value 访问异常问题 应用从 Java 8 迁移到 Java 17 后,使用 GemFire 缓存默认的 PDX 序列化时,仅在 Java 17 环境下序列化会抛出 java.lang.string.value 不可访问异常。目前 Spring-geode-starter 暂无新版本修复该问题。
已尝试的方案及结果:
- 通过
env.ini配置--add-opens参数开放 java.util、java.math、java.time、sun.security 等多个 Java 内部包以支持序列化,但因涉及数千个应用,该配置方式维护成本极高 - 尝试代码重构(将 String 替换为 byte[]、char[]、StringBuilder 等)、module-info 配置、VarHandle 方案,均未解决问题
- 使用 BurningWave 依赖可解决异常,但担忧其采用不安全实现,希望找到合规的解决方案(含代码重构方向)
当前代码示例:
public class Test implements PdxSerializable { private String name; private JsonWebKey jwk; private LocalDateTime created; // 所有字段的 getter 和 setter 方法 @Override public void toData(PdxWriter pdxWriter) { pdxWriter.writeString("name", getName()).markIdentityField("name"); pdxWriter.writeString("created", getCreated().toString()).markIdentityField("created"); pdxWriter.writeString("jwk", getJwk().toString()).markIdentityField("jwk"); } // 需实现 fromData 方法,原代码未提供 @Override public void fromData(PdxReader pdxReader) { // 对应字段读取逻辑 } }
内容的提问来源于stack exchange,提问作者user29731474
相关产品推荐
相关产品推荐

