我正在使用 JAXB 在我创建的用于 Spring Boot 应用程序的库中转换和封送 XML。该应用程序在具有 ECS 的 Docker 容器中的 AWS 上运行,目前使用 CompletableFuture 和默认线程池来运行该库。代码是这样的:
CompletableFuture<Result> result = CompletableFuture.supplyAsync(() -> apiClient.callApiToGetXmlToTransform(someParameters))
.thenApplyAsync(searchResultStream -> transformResult(searchResultStream));
然后,transformResult 有一些映射逻辑,用于将传入的 XML 转换为我需要的输出格式(结果)。一切在本地都运行得很好,不会抛出任何错误。然而,当相同的代码在 Docker 容器中的 AWS ECS 上运行时,第一个线程会正确转换并返回,但所有其他线程都会抛出此 JAXB 错误:
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at
我在库和应用程序中的 build.gradle 上都有所有必要的 JAXB 依赖项。为什么此错误仅在 AWS 上的多个线程上抛出,而不是在本地抛出?