java - 由 : java. lang.VerifyError 引起:无法链接 com/fasterxml/jackson/databind/type/ReferenceType:无法从最终类继承

标签 java mongodb apache-spark hdfs

我使用的是 Spring 版本 4.3.13.RELEASE、Spark 版本 2.2.0-2.11、mongo-spark-connector_2.11(2.2.0)、jackson 2.8.9。我的应用程序在 Tomcat7 中运行良好,但在 Wildfly10 中出现异常

org.springframework.web.util.NestedServletException:处理程序调度失败;嵌套异常是 java.lang.VerifyError: Failed to link com/fasterxml/jackson/databind/type/ReferenceType (Module "deployment.app.war:main"from Service Module Loader): 不能从最终类继承
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
在 io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
在 io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
在 io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
在 org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
在 io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
在 io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
在 io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
在 io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
在 io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
在 io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
在 io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
在 io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
在 org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
在 io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
在 io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
在 io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
在 io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
在 io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
在 io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
在 java.lang.Thread.run(Thread.java:748)

最佳答案

由 maven 或 gradle war 插件创建的 spring boot 2.0 war 将适用于 jboss EAP 7.1。同样的 war 文件将通过 jboss EAP 7.0 服务器上的异常。

The exception is java.lang.VerifyError: Failed to link com/fasterxml/jackson/databind/type/ReferenceType

出现部署异常是因为 jboss 有自己的 jackson 库,并且发生类加载时间验证错误。

解决方案:
这个问题的解决方法是在WEB-INF文件夹中添加一个jboss特定的xml文件,名为jboss-deployment-structure.xml。
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-annotations" />
<module name="com.fasterxml.jackson.core.jackson-core" />
<module name="com.fasterxml.jackson.core.jackson-databind" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
<module name="org.jboss.resteasy.resteasy-jackson2-provider" />
<module name="org.slf4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>

关于java - 由 : java. lang.VerifyError 引起:无法链接 com/fasterxml/jackson/databind/type/ReferenceType:无法从最终类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669347/

相关文章:

mongodb - 使用 Scala 创建嵌套字段并将数据框存储到 MongoDB?

scala - 可以使用 reduceBykey 来更改类型和组合值 - Scala Spark?

scala - 在 Spark 中读取 Windows 网络文件

java - Swagger-UI 未正确显示

java - 在 Websphere 中获取 500 NullPointerException - Apache Wink Rest 服务

Mongodb 副本集 - 始终显示 "syncingTo"

mongodb - 比较同一文档的两个字段

url - 如何使用 MongoDB/Node.js 创建友好的 URL?

java - Tomcat 8.5 重写 Valve 将 root 请求重定向到特定的 webapp

java - 如何使用java客户端请求tensorflow为wide&deep模型提供服务或者如何使用java加载wide&deep模型并预测?