从Servlet调用Jackson JSON解析器时获取ClassNotFoundException

我有一个由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

奇怪的是,只有当我尝试PDFGenerator.parseJSONDocument(jsonDocument)从servlet调用时,这种异常才会出现,而从常规Java类执行的过程就可以顺利进行。

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


拉丁的传说
浏览 259回答 1
1回答

慕盖茨4494581

这个问题几乎可以肯定是由您的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部署在“ webapp”容器中(包括所有必需的库(必需的JAR的适当版本等))是一个好主意。这样做会将您的servlet隔离在单个类加载器下,并自动将它们定位在正确的层次结构中。请参阅链接文档的这一部分:WebappX&nbsp;—为部署在单个Tomcat实例中的每个Web应用程序创建一个类加载器。Web应用程序的/ WEB-INF / classes目录中的所有未解压缩的类和资源,以及Web应用程序的/ WEB-INF / lib目录下的JAR文件中的类和资源,对于此Web应用程序都是可见的,但不是给其他人。仅供参考,还有其他方法可以使用企业级Web应用程序执行此操作,但是我们在这里不做讨论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java