Java8迁移至Java11时javax/activation/DataSource异常排查求助
Java 8迁移至Java 11后javax/activation/DataSource类找不到问题排查思路
我们正在从Java 8迁移到Java 11,遇到SystemException: javax/activation/DataSource异常。已知Java 9及以上版本移除了javax.activation模块,已添加如下Maven依赖,但问题仍未解决:
<dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
附异常堆栈信息:
2022-11-04 15:30:56,505 [][][][][ERROR] - javax/activation/DataSource 2022-11-04 15:30:56,506 [][][][][ERROR] - [java.base/java.lang.ClassLoader.defineClass1(Native Method), java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017), java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174), java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555), java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458), java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452), java.base/java.security.AccessController.doPrivileged(Native Method), java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451), java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589), java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522), org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:538), java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522), com.edb.finance.appl.document.livecycleproxy.LiveCycleProxyClient.mapLiveCycleRequestToDocumentInputData(LiveCycleProxyClient.java:269), com.edb.finance.appl.document.livecycleproxy.LiveCycleProxyClient.createLiveCycleProxyServiceRequest(LiveCycleProxyClient.java:231), com.edb.finance.appl.document.livecycleproxy.LiveCycleProxyClient.produceDocuments(LiveCycleProxyClient.java:84), com.edb.finance.appl.document.livecycleproxy.LiveCycleProxyClient.produceDocument(LiveCycleProxyClient.java:79), com.edb.finance.appl.document.livecycleproxy.LiveCycleProxyClient.produceDocument(LiveCycleProxyClient.java:64), com.edb.finance.appl.document.components.decisionreport.dao.DecisionReportDAO.generateDecisionReport(DecisionReportDAO.java:75), com.edb.finance.appl.document.components.decisionreport.business.DecisionReport.generateDecisionReport(DecisionReport.java:91), com.edb.finance.appl.document.components.decisionreport.business.DecisionReportProxy.generateDecisionReport(DecisionReportProxy.java:44), com.edb.finance.appl.document.components.decisionreport.business.report.StandardReportPdfGenerator.generateStandardPdfCaseReport(StandardReportPdfGenerator.java:110), com.edb.finance.appl.document.components.decisionreport.business.report.DecisionReportGenerator.storeAllCaseReports(DecisionReportGenerator.java:109), com.edb.finance.appl.decisionextended.components.decisionextended.business.ejb.DecisionExtendedEJB.updateRecommendationOnCaseAndGenerateReport(DecisionExtendedEJB.java:3990), com.edb.finance.appl.decisionextended.components.decisionextended.business.ejb.DecisionExtendedProxy.updateRecommendationOnCaseAndGenerateReport(DecisionExtendedProxy.java:346), com.edb.finance.appl.decisionextended.components.decisionextended.business.ServiceHandler.updateRecommendationOnCaseAndGenerateReport(ServiceHandler.java:83), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.createRecommendationInCase(JointLimitService.java:921), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.createRecommendationForCase(JointLimitService.java:706), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.createRecommendationsAllCasesRelatedToGroup(JointLimitService.java:685), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.createRecommendation(JointLimitService.java:643), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.runCreateRecommendationJob(JointLimitService.java:517), com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService$$FastClassBySpringCGLIB$$2a40bb74.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750), org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115), java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264), java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128), java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628), java.base/java.lang.Thread.run(Thread.java:829)] 2022-11-04 15:30:56,506 [][][][][ERROR] - javax/activation/DataSource 2022-11-04 15:30:56,508 [][][][][ERROR] - Service threw exception com.edb.finance.common.exception.SystemException: javax/activation/DataSource at com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService.runCreateRecommendationJob(JointLimitService.java:525) at com.evry.fs.lending.ecp.jointlimit.ws.resources.jointlimit.JointLimitService$$FastClassBySpringCGLIB$$2a40bb74.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
排查思路
验证依赖有效性
- 用
mvn dependency:tree查看依赖树,确认activation依赖未被其他依赖排除,且已成功引入项目。 - 检查最终部署包(如war包)的WEB-INF/lib目录,确认activation.jar存在。
- 尝试升级依赖版本至
1.1.2,或改用Jakarta EE兼容包jakarta.activation:jakarta.activation-api:2.1.2(需同步修改代码中包名为jakarta.activation)。
- 用
类加载器问题排查
- 从堆栈看是Jetty的
WebAppClassLoader加载失败,检查Jetty的类加载配置,确认未限制WEB-INF/lib中类的加载权限。 - 排查是否存在多版本activation包冲突:检查容器或第三方依赖是否自带旧版本activation类,导致类加载优先级异常。
- 从堆栈看是Jetty的
Java模块系统配置
- 若项目使用模块化(存在module-info.java),需添加模块声明:
requires javax.activation;(改用Jakarta包则为requires jakarta.activation;)。 - 添加JVM启动参数
--add-modules javax.activation,确保Java 11模块系统能识别该依赖。
- 若项目使用模块化(存在module-info.java),需添加模块声明:
代码与第三方库检查
- 查看
LiveCycleProxyClient.java:269处代码,确认是直接引用还是反射加载javax.activation.DataSource,反射场景需确保类名拼写正确且类加载器可访问。 - 检查LiveCycle等第三方依赖是否也依赖javax.activation,确保其版本与当前引入的activation包兼容。
- 查看
构建与环境验证
- 清理项目构建目录(如target)后重新构建,避免Java 8环境下的编译残留。
- 确认部署环境使用的是Java 11,未混合Java 8的类库或配置。
内容的提问来源于stack exchange,提问作者JavaGeek
相关产品推荐
相关产品推荐

