专栏首页兜兜毛毛POI NoClassDefFoundError: org.openxmlformats.schemas.

POI NoClassDefFoundError: org.openxmlformats.schemas.

问题现象

项目中在导入或导出时都会报以下错误:

java.lang.NoClassDefFoundError: Cloud not initialize class org.openxmlformats.schemas.***sheetml.x2006.main.CTWorkbook

在本地测试没有问题,在打包到测试环境就会出以上问题。

分析

根据错误提示了解到NoClassDefFoundError是系统运行期,动态加载类时会提示该错误。

跟踪代码是在CTWorkbook

	private static SoftReference<SchemaTypeLoader> typeLoader;

	private static synchronized SchemaTypeLoader getTypeLoader() {
		SchemaTypeLoader var0 = typeLoader == null ? null : (SchemaTypeLoader)typeLoader.get();
		if (var0 == null) {
			var0 = XmlBeans.typeLoaderForClassLoader(CTWorkbook.class.getClassLoader());
			typeLoader = new SoftReference(var0);
		}
		return var0;
	}

	public static CTWorkbook newInstance() {
		return (CTWorkbook)getTypeLoader().newInstance(CTWorkbook.type, (XmlOptions)null);
	}

发现会调用org.apache.xmlbeans.SchemaTypeLoader类,根据类别进行实例化。

在测试环境中 (CTWorkbook)getTypeLoader().newInstance(CTWorkbook.type, (XmlOptions)null); 报错了

使用Arthas 工具在测试环境中检测getTypeLoader()方法也没发现什么异常。

进入Docker容器看了一下加载的lib包,发现比正常的版本包多出许多重复的包。

根据比较与查询,最后发现有一个xbeans与xmlbean包中的实现类路径相同导致。

根据包引用关系,反查出xfire:xfire-all 这个包将其他子包也引入到了工程中,在这个包的引用关系中也找到了xbeans包的引用。

最后修改导入包,排除org.codehaus.xfire其他包

compile ("org.codehaus.xfire:xfire-all:1.2.6") { exclude group: "org.codehaus.xfire" }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot注解大全

    https://www.cnblogs.com/tanwei81/p/6814022.html

    一个优秀的废人
  • 你清楚这几个 Spring 常用注解吗?

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:

    一个优秀的废人
  • WeHalo 简约风 的微信小程序版博客

    大家的支持,鼓励,认可,是我坚持开源的动力,虽然后面开发完有点拖拉,请原谅 ~ 渲染图在设计中

    爱敲代码的猫
  • Maven 教程之 settings.xml 详解

    从 settings.xml 的文件名就可以看出,它是用来设置 maven 参数的配置文件。settings.xml 中包含类似本地仓储位置、修改远程仓储服务器...

    一个优秀的废人
  • Spring MVC 复盘 | 工作原理及配置详解

    https://mp.weixin.qq.com/s/z-fhmDa9iBwSG6OJx1x5hw

    一个优秀的废人
  • Springboot总结,核心功能,优缺点

    Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。

    一个优秀的废人
  • 性能监控之Telegraf+InfluxDB+Grafana实现JMX实时监控

    性能测试需要监控服务端 JVM 信息,Java 虚拟机 (JVM) 提供操作管理和监测提供了一套完整框架,即 JMX(Java 管理扩展),我们需要做到采集其所...

    高楼Zee
  • 渗透测试越权漏洞测试详情

    最近忙于工作没有抽出时间来分享渗透测试文章,索性今天由我们Sinesafe的高级渗透大牛给大家详细讲下主要在业务中发现逻辑和越权的漏洞检测方法,希望大家能对自己...

    技术分享达人
  • Spring 复盘 | IOC

    全面进入复习模式,从 Spring 开始。Spring 是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的。我很不喜欢这种略显官方的说辞。千人千面,每...

    一个优秀的废人
  • Spring 复盘 | AOP

    Spring AOP 基础 Java 动态代理实现,阅读文章之前,你最好有以下基础:

    一个优秀的废人

扫码关注云+社区

领取腾讯云代金券