Save保存报错

版本:25.8
错误报错:

2026-01-26 18:13:31.741 [http-nio-8080-exec-1] ERROR com.docforge.controller.GlobalExceptionHandler - 未知异常: Handler dispatch failed: java.lang.NoClassDefFoundError: Could not initialize class com.aspose.words.internal.zzXp7
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoClassDefFoundError: Could not initialize class com.aspose.words.internal.zzXp7
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.aspose.words.internal.zzXp7
	at com.aspose.words.internal.zzXhf.zz6(Unknown Source)
	at com.aspose.words.internal.zzJS.zzXDk(Unknown Source)
	at com.aspose.words.internal.zzJS.zzZ0x(Unknown Source)
	at com.aspose.words.internal.zzJS.zzYRf(Unknown Source)
	at com.aspose.words.internal.zzW6q.zzN0(Unknown Source)
	at com.aspose.words.zzVX8.zzXKJ(Unknown Source)
	at com.aspose.words.zzVX8.zzYmr(Unknown Source)
	at com.aspose.words.zzXUS.zzXDk(Unknown Source)
	at com.aspose.words.zzYjJ.zzXDX(Unknown Source)
	at com.aspose.words.zzYjJ.zzXDk(Unknown Source)
	at com.aspose.words.zzWMX.zzXDk(Unknown Source)
	at com.aspose.words.zzWMX.zzXDk(Unknown Source)
	at com.aspose.words.zzXBG.zzZ0x(Unknown Source)
	at com.aspose.words.zzXBG.zzYRf(Unknown Source)
	at com.aspose.words.zzXBG.zzYRf(Unknown Source)
	at com.aspose.words.zzXiW.zzZys(Unknown Source)
	at com.aspose.words.zzYo1.zzZmV(Unknown Source)
	at com.aspose.words.zzZDH.zzXDk(Unknown Source)
	at com.aspose.words.zzZDH.zzWew(Unknown Source)
	at com.aspose.words.zzZDH.zzaQ(Unknown Source)
	at com.aspose.words.zzZDH.zzgp(Unknown Source)
	at com.aspose.words.zzZDH.zzWew(Unknown Source)
	at com.aspose.words.zzZDH.zzXDk(Unknown Source)
	at com.aspose.words.zzuV.zzXDk(Unknown Source)
	at com.aspose.words.zzuV.zzW4C(Unknown Source)
	at com.aspose.words.zzX5o$zzXDk.zzWpp(Unknown Source)
	at com.aspose.words.zzX0h.zzWpp(Unknown Source)
	at com.aspose.words.zzX5o.zzYRf(Unknown Source)
	at com.aspose.words.zzX5o.zzWcw(Unknown Source)
	at com.aspose.words.zzYKW.zzWpp(Unknown Source)
	at com.aspose.words.zzX0h.zzWpp(Unknown Source)
	at com.aspose.words.zzZXi.zzaQ(Unknown Source)
	at com.aspose.words.zzXFN.zzW4C(Unknown Source)
	at com.aspose.words.zzZ4Q.zzHl(Unknown Source)
	at com.aspose.words.Document.updatePageLayout(Unknown Source)
	at com.aspose.words.Document.zzWu1(Unknown Source)
	at com.aspose.words.Document.zzWIn(Unknown Source)
	at com.aspose.words.zzWqT.zzXDk(Unknown Source)
	at com.aspose.words.zzWqT.zzWAW(Unknown Source)
	at com.aspose.words.zzWqT.zzaQ(Unknown Source)
	at com.aspose.words.zzWqT.zzWoI(Unknown Source)
	at com.aspose.words.zzWqT.zzZ2p(Unknown Source)
	at com.aspose.words.zzWqT.zzVd(Unknown Source)
	at com.aspose.words.zzZPc.zzXDk(Unknown Source)
	at com.aspose.words.zzWKm.zzXDk(Unknown Source)
	at com.aspose.words.Document.zzaQ(Unknown Source)
	at com.aspose.words.Document.zzXDk(Unknown Source)
	at com.aspose.words.Document.save(Unknown Source)
	at com.aspose.words.Document.save(Unknown Source)
	at com.docforge.service.impl.AsposeIntegratorServiceImpl.generateWordPreview(AsposeIntegratorServiceImpl.java:151)
	at com.docforge.service.impl.AsposeIntegratorServiceImpl.generatePreview(AsposeIntegratorServiceImpl.java:113)
	at com.docforge.service.impl.PreviewGeneratorServiceImpl.generatePreview(PreviewGeneratorServiceImpl.java:57)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:242)
	at jdk.proxy2/jdk.proxy2.$Proxy92.generatePreview(Unknown Source)
	at com.docforge.service.impl.PreviewServiceImpl.generateNewPreview(PreviewServiceImpl.java:144)
	at com.docforge.service.impl.PreviewServiceImpl.generatePreview(PreviewServiceImpl.java:63)
	at com.docforge.controller.PreviewController.generatePreviewFromFile(PreviewController.java:148)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:765)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:717)
	at com.docforge.controller.PreviewController$$SpringCGLIB$$0.generatePreviewFromFile(<generated>)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:262)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
	... 43 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: Exception java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.aspose.note.internal.twelvemonkeys.imageio.plugins.tiff.TIFFImageReaderSpi not found [in thread "http-nio-8080-exec-1"]
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1219)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
	at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
	at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
	at java.desktop/javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(IIORegistry.java:179)
	at java.desktop/javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:107)

@hx.patient

你遇到了在使用 Aspose.Words 25.8 版本保存文档时抛出的 NoClassDefFoundError 错误,具体是 Could not initialize class com.aspose.words.internal.zzXp7,并且伴随 ServiceConfigurationError,提示找不到图像读取器 SPI 提供者 。

这个问题可能与类初始化失败、缺少依赖项或类路径配置有关 。类似问题曾在论坛中出现过,例如 2022 年关于 com.aspose.words.zzW5K 的错误 。

排查建议:

  1. 确认 Aspose.Words 版本一致性
    确保项目中只包含版本为 25.8 的 aspose-words JAR 文件,并排除任何旧版或冲突的 Aspose 组件。

  2. 检查类路径和依赖项
    验证是否遗漏了必要的依赖库,特别是与图像处理相关的库(如 TwelveMonkeys 图像库)。

  3. 验证 Java 环境兼容性
    Aspose.Words 25.8 支持 JDK 17 及以上版本,请确保运行环境满足要求。

  4. 清理并重新部署应用
    清除构建缓存(如 Maven 的 .m2/repository 或 Gradle 的 ~/.gradle/caches),然后重新打包并部署应用。

如果问题仍然存在,可以尝试提供一个最小可复现示例以帮助进一步诊断。当前问题已记录,后续将由支持团队跟进处理 。

@hx.patient 请您提供出现问题的输入数据以及一段简单的代码,以便我们能够在本地重现该问题。我们将检查问题并提供更多信息。

代码:

com.aspose.words.Document document = new Document(new ByteArrayInputStream(fileContent));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
htmlOptions.setExportImagesAsBase64(true); // Embed images as base64
htmlOptions.setPrettyFormat(true);
htmlOptions.setExportHeadersFootersMode(com.aspose.words.ExportHeadersFootersMode.PER_SECTION);
document.save(outputStream, htmlOptions);

测试文件
这是一个测试源文件.docx (71.4 KB)

@hx.patient 感谢您提供的更多信息。我这边使用最新版 Aspose.Words for Java 26.1 无法重现此问题。请您尝试使用最新版本,并告知我们您那边是否仍然存在此问题。