2

アプリケーションをデプロイしているときにこのエラーが発生します

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スローのポイントを理解しました。しかし、この場合、この問題を解決するために何をすべきかは不明です。

私を助けてください

4

2 に答える 2

2

宣言されArrayTypeたメソッドをオーバーライドしようとするものを含むjarファイルを使用します。つまり、オーバーライドできないため、バイトコードベリファイアが例外をスローします。isAbstract()finalVerifyError

問題は、異なるバージョンの jar を混在させていることです。

ArrayTypeから org.codehaus.jackson.map.type.TypeBase継承しorg.codehaus.jackson.type.JavaTypeます。

JavaTypeisAbstract()が定義されている場所です。古いバージョンでは、次のように宣言されています。

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

これはfinalご覧のとおり、オーバーライドできないことを意味します。それ以降のバージョンでは、これは次のように変更されました

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

final後で (後のバージョンで) 削除され、サブクラスがこのメソッドをオーバーライドできるようになりました。ArrayTypeの新しいバージョンでビルドされたバージョンを使用してJavaTypeいますが、含まれているjarは、これが許可されていない古いバージョンです。

すべての jar から同じバージョンを使用する必要があり、これは機能し、この例外は発生しません。たとえば、動作し、適切なバージョンの jar を含むマシンからすべての依存関係 (jar) を、他Exceptionの古いバージョンの依存関係を取得する他のコンピューターにコピーします。

または、ダウンロード ページから最新の Jackson jar をダウンロードして、どこでも使用できます。

于 2014-09-08T07:17:34.857 に答える
0

私にとっては、Tomcat のバージョンを 6.0 ではなく 7.0 に置き換えることで問題が解決しました。Tomcat を別のサーバーから問題のあるサーバーにコピーしただけで、その後はすべてうまくいきました。ちょっと変だけど:-/

于 2014-09-08T12:43:40.617 に答える