【问题标题】:java.lang.VerifyError: class org.codehaus.jackson.map.type.ArrayType overrides final method isAbstract.()Zjava.lang.VerifyError:类 org.codehaus.jackson.map.type.ArrayType 覆盖最终方法 isAbstract.()Z
【发布时间】:2014-09-08 07:04:55
【问题描述】:

我在部署应用程序时收到此错误

java.lang.VerifyError: class org.codehaus.jackson.map.type.ArrayType overrides final method isAbstract.()Z
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826)
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:379)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:324)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:621)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)

有趣的是,相同的应用程序部署在另一台机器上并且运行良好。 这有什么问题?看到了很多问题并理解了问题/java抛出的重点。但是对于这种情况,我应该怎么做才能解决这个问题。

请帮帮我

【问题讨论】:

  • 检查两台机器的 Java 版本。
  • @Dmytro,他们是一样的
  • 您是否在每台机器上单独构建您的应用程序?
  • @Dmytro,没有。我们有共同的詹金斯工作
  • 您是否可以自己构建它以查看 Jenkins 作业是否存在错误?

标签: java json verifyerror


【解决方案1】:

您使用了一个包含 ArrayType 的 jar 文件,它试图覆盖声明为 final 的方法 isAbstract(),这意味着它不能被覆盖,这使得字节码验证器抛出 VerifyError 异常。

问题是您正在混合具有不同版本的 jar。

ArrayType 继承自 org.codehaus.jackson.map.type.TypeBase,而 org.codehaus.jackson.map.type.TypeBase 继承自 org.codehaus.jackson.type.JavaType

JavaType 是定义 isAbstract() 的位置。在旧版本中,它被声明为:

public final boolean isAbstract() {
    Modifier.isAbstract(_class.getModifiers());
}

您可以看到 final,这意味着您无法覆盖它。在后来的版本中,这被更改为

public boolean isAbstract() {
    Modifier.isAbstract(_class.getModifiers());
}

final 已在稍后(在更高版本中)被删除,它允许子类覆盖此方法。您使用的是基于较新版本的 JavaType 构建的 ArrayType 版本,但您包含的 jar 是旧版本,但不允许这样做。

您必须使用所有 jar 中的相同版本,然后这将起作用,您不会得到此异常。例如,将所有依赖项(jars)从可以工作并包含正确版本的 jars 的机器复制到您获得 Exception 的另一台计算机(您有其他旧版本的依赖项)。

或者直接从download page 下载最新的 Jackson jar 并在任何地方使用。

【讨论】:

  • 我同意你的看法。但是相同的应用程序运行在具有相同 JDK 版本的不同机器上。为什么它不在这台机器上运行
  • 因为引用的类可能来自作为(Web)应用程序的一部分或作为环境的一部分的 jars(例如 JDK、像 Tomcat 等的 servlet 容器)。如果引用的类是环境的一部分,它可能会从那里加载,而不是从您的应用程序加载,即使您的应用程序包含正确的版本。
【解决方案2】:

对我来说,问题是通过将 Tomcat 版本替换为 7.0 而不是 6.0 来解决的 我只是将tomcat从另一台服务器复制到出现问题的服务器,之后一切正常。不过有点奇怪:-/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多