gpt4 book ai didi

java - 从 servlet 调用 Jackson JSON 解析器时获取 ClassNotFoundException : com. fasterxml.jackson.core.JsonProcessingException

转载 作者:行者123 更新时间:2023-11-28 22:47:59 24 4
gpt4 key购买 nike

我有一个由 Tomcat 8 提供支持的 servlet,它调用一个静态方法来使用 Jackson 2.9.6 执行 JSON 解析。

代码执行期间:

JSONData parsedJSONData = PDFGenerator.parseJSONDocument(jsonDocument);

我得到:

java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException

重要的是要注意,servlet 类和 PDFGenerator 类位于不同的包中,但具有 public 访问修饰符。

我尝试通过pom.xml 将依赖项添加到项目的根目录:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>

但这并没有帮助。

在我的项目中,我没有使用 Maven,只是通过 classpath 添加了所需的库。

奇怪的是,仅当我尝试从 servlet 调用 PDFGenerator.parseJSONDocument(jsonDocument) 时才会出现此类异常,从常规 Java 类执行时可以顺利进行。

为了能够使用基于 FasterXML/Jackson JSON 库的 JSON 解析器功能调用静态方法,我应该在何处添加什么?

最佳答案

这个问题几乎可以肯定是由您的 servlet 容器 (Tomcat 8.x) 中的类加载器无法找到 Jackson 的库/JAR 引起的。在 servlet 容器中加载类/库的方式不同于独立 Java 应用程序的标准类路径声明。这就是为什么您看到来自 servlet 引擎的错误,但在您直接执行该类期间却看不到的原因。以下是有关 Tomcat 8.x 如何处理类加载的一般文档:

https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html

作为一般规则,为了首先帮助防止此类问题,最好将您的 servlet 部署在包含所有必需库(所需 JAR 的适当版本等)的“webapp”容器中。这样做会将您的 servlet 隔离在单个类加载器下,并自动将它们定位在正确的层次结构中。请参阅链接文档的这一部分:

WebappX — A class loader is created for each web application that is deployed in a single Tomcat instance. All unpacked classes and resources in the /WEB-INF/classes directory of your web application, plus classes and resources in JAR files under the /WEB-INF/lib directory of your web application, are made visible to this web application, but not to other ones.

仅供引用,还有其他方法可以使用企业级 Web 应用程序执行此操作,但我们不在这里讨论。

关于java - 从 servlet 调用 Jackson JSON 解析器时获取 ClassNotFoundException : com. fasterxml.jackson.core.JsonProcessingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51168697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com