在java 21版本中运行chainMaker sdk异常
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:
【问题描述】(请对问题进行描述,方便定位问题)
具体的现象,操作步骤,前置条件等,尽可能描述清楚,有截图说明更佳 基于openjdk 21版本运行,配套2.3.3版本SDK+Spring boot启动app过程异常如下(netty-handler版本4.1.53)
11:09:26.036 [main] ERROR o.c.s.c.ChainmakerX509CryptoSuite - [<clinit>,75] - CurveDB enableGM err :
java.lang.reflect.InaccessibleObjectException: Unable to make private native java.lang.reflect.Field[] java.lang.Class.getDeclaredFields0(boolean) accessible: module java.base does not "opens java.lang" to unnamed module @2d2ffcb7
at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:197)
at org.chainmaker.sdk.crypto.ChainmakerX509CryptoSuite.loadAlgorithms(ChainmakerX509CryptoSuite.java:445)
at org.chainmaker.sdk.crypto.ChainmakerX509CryptoSuite.<clinit>(ChainmakerX509CryptoSuite.java:72)
at org.chainmaker.sdk.User.<init>(User.java:84)
在jvm启动参数增加--add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED后这个异常处理掉了,但是还有新的异常:
Caused by: java.lang.InternalError: java.lang.IllegalAccessException: static final field has no write access: io.netty.handler.ssl.ExtendedOpenSslSession.LOCAL_SUPPORTED_SIGNATURE_ALGORITHMS/[Ljava.lang.String;/putStatic, from class java.lang.Object (module java.base)
at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:167)
at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:145)
at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1200)
at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1169)
at java.base/java.lang.reflect.Field.get(Field.java:444)
at org.chainmaker.sdk.crypto.ChainmakerX509CryptoSuite.loadAlgorithms(ChainmakerX509CryptoSuite.java:458)
at org.chainmaker.sdk.crypto.ChainmakerX509CryptoSuite.<clinit>(ChainmakerX509CryptoSuite.java:72)
通过阅读代码,发现应该是想要加载国密算法到netty,通过咨询大模型给出的建议,如果要扩展netty的ssl算法,通过SslContextBuilder+SslHandler来实现,不要违反final static的安全原则去修改他。 由于OpenJDK生命周期维护的问题,我们希望长安链同步支持21版本(17版本运行没问题)
【相关日志文件】(如果有报错日志请贴图,或者上传附件)
chainmaker-go 的 log/system.log & bin/panic.log file *
SDK 的 sdk.log file
【系统信息】(请填写系统信息,方便定位问题)
- chainmaker-go version * : [v2.3.3]
- OS & version * : Windows 11
- docker镜像 version: 无
-
管理台 version: 无
- 如果是管理台的相关问题,请附带管理台版本,如果不是可忽略。
-
区块浏览器 version: 无
- 如果是浏览器的相关问题,请附带浏览器版本,如果不是可忽略。
-
合约IDE version: 无
- 如果是合约IDE的相关问题,请附带合约IDE版本,如果不是可忽略。
-
web签名插件 version: 无
- 如果是web签名插件的相关问题,请附带web签名插件版本,如果不是可忽略。
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information