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

升级org.glassfish.javax.json至1.1.2后出现JsonProviderImpl找不到错误

解决OSGi中升级org.glassfish.javax.json至1.1.2后找不到JsonProviderImpl的问题

可能的原因及对应解决方案

1. 检查org.glassfish.javax.json 1.1.2的包导出配置

从1.0.4升级到1.1.2后,该bundle可能调整了导出包列表。org.glassfish.json包(包含JsonProviderImpl)可能未被默认导出,导致你的bundle无法访问:

  • 查看该bundle的MANIFEST.MF,确认是否包含Export-Package: org.glassfish.json
  • 如果没有,可通过bnd工具修改bundle配置强制导出该包,或更换为适配OSGi的org.glassfish.javax.json发行版

2. 调整你的bundle依赖声明

仅依赖javax.json-api可能不足以让类加载器找到实现类,需补充对实现包的依赖:

  • 在MANIFEST.MF中添加Require-Bundle: org.glassfish.javax.json; resolution:=optional(保持可选依赖),或直接Require-Bundle: org.glassfish.javax.json
  • 也可使用Import-Package: org.glassfish.json; resolution:=optional导入该包

3. 修复SPI服务发现的OSGi适配问题

OSGi类加载器隔离会导致标准Java SPI机制失效,1.1.2版本可能依赖OSGi服务注册而非SPI:

  • 确认org.glassfish.javax.json 1.1.2启动时已注册javax.json.spi.JsonProvider服务
  • 若未自动注册,可在你的bundle中用ServiceTracker手动获取服务:
ServiceTracker<JsonProvider, JsonProvider> tracker = new ServiceTracker<>(bundleContext, JsonProvider.class, null);
tracker.open();
JsonProvider provider = tracker.getService();
// 用provider创建JsonFactory等实例

4. 调整Guice注入配置

Guice在OSGi环境下无法自动发现SPI实现,需显式绑定JsonProvider:

  • 在Guice模块中添加绑定规则:
bind(JsonProvider.class).toInstance(JsonProvider.provider());
// 若通过OSGi服务获取实例,直接绑定获取到的provider对象
  • 检查Guice使用的类加载器是否与你的bundle类加载器一致,确保能访问org.glassfish.json.JsonProviderImpl

5. 验证bundle启动顺序

确保org.glassfish.javax.json 1.1.2在你的业务bundle之前启动,避免启动时无法访问实现类:

  • 在OSGi容器中调整启动级别,将org.glassfish.javax.json设为更高优先级(如启动级别2),业务bundle设为更低级别(如启动级别5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:07:47