You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Maven集成PayPal支付遇HelloExtension类缺失错误求助

排查java.lang.NoClassDefFoundError: sun/security/ssl/HelloExtension的步骤

这个错误核心是sun/security/ssl/HelloExtension属于JDK内部非公开API,在JDK 8不同更新版本中,该类的存在形式、访问权限有变化,再加上GlassFish的NPN(Next Protocol Negotiation)组件可能和JDK的SSL实现冲突,最终导致类加载失败。结合你的环境(NetBeans 8.2、JDK 8、GlassFish 5.x、PayPal集成项目),以下是针对性排查修复步骤:

  • 匹配JDK与GlassFish的兼容版本
    GlassFish 5.0官方推荐JDK 8u141及以上,但JDK 8u261之后版本对内部API的访问限制大幅收紧,sun.security.ssl下的类被进一步封装。你降级到u151、u181未解决问题,大概率是GlassFish的NPN组件和这些JDK版本的SSL实现不兼容。建议直接使用GlassFish 5.0官方指定的JDK 8u141版本测试,不要跨版本跳级。

  • 清理Maven依赖冲突
    集成PayPal时引入的依赖(如Apache HttpClient、PayPal SDK自带SSL库)可能和GlassFish自带的Grizzly NPN组件冲突:

    1. 打开项目pom.xml,查找所有含ssl、grizzly、npn关键字的依赖,排查重复或版本不匹配项;
    2. 给GlassFish相关依赖添加<scope>provided</scope>,避免Maven将其打包到WAR包,和服务器自带组件冲突;
    3. 确认PayPal SDK版本,选用兼容JDK 8和GlassFish 5的版本,比如paypal-rest-api-sdk的1.14.0~1.19.0区间版本(避免用太新的版本引发API不兼容)。
  • 调整GlassFish的JVM参数放宽内部API访问
    JDK 8u161之后默认开启--illegal-access=deny限制访问内部API,可在GlassFish的domain.xml中修改JVM参数:
    找到<jvm-options>节点,添加:

    --add-opens=java.base/sun.security.ssl=ALL-UNNAMED
    --add-opens=java.base/sun.security.ssl.SSLExtension=ALL-UNNAMED
    

    修改后重启GlassFish再测试支付流程。

  • 彻底清理并替换GlassFish的NPN组件
    你之前移除grizzly-npn-bootstrap.jar中的sun文件可能操作不彻底,或GlassFish仍在加载旧组件:

    1. 找到GlassFish安装目录下的glassfish/modules文件夹,删除所有含npn的jar包;
    2. 下载与当前JDK 8版本兼容的grizzly-npn-bootstrap包(比如JDK 8u181对应npn-bootstrap-1.1.1.v20180917);
    3. 将新包替换到modules目录,重启服务器。
  • 改用JDK原生SSL实现替代GlassFish NPN
    若以上方法无效,可禁用GlassFish自带的NPN组件,改用JDK原生SSL:
    在domain.xml的<network-listener>节点添加ssl-enabled="true",配置JDK的SSL证书,同时移除所有和NPN相关的配置参数。


内容的提问来源于stack exchange,提问作者user19914311

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:35:16