parallelStream() 导致 ClassNotFoundException with JAXB-API
在我们的应用程序中,我们有时会遇到以下异常:
javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
我们已经发现,只有在我们使用时才会发生这种情况,但是如果我们使用.c,则不会发生这种情况。Collection.parallelStream()
Collection.stream()
我们看到 JAXB 用于加载类。我们还看到,当使用 时,用于执行命令的线程使用不同的类装入器。有时它是一个 ,有时它是一个 .Thread.currentThread().getContextClassLoader()
parallelStream()
org.apache.catalina.loader.WebappClassLoader
jdk.internal.loader.ClassLoaders.AppClassLoader
现在看来,他们不知道 JAXB 的依赖关系,而他们却知道。AppClassLoader
WebappClassLoader
我们使用的是 Java 11 和以下 Maven 依赖项:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
任何想法可能是什么问题?怎么可能,不知道我们的依赖关系?AppClassLoader