web-dev-qa-db-ja.com

突堤の起動時にスローされる奇妙なJava.lang.ArrayIndexOutOfBoundsException

Jettyアプリケーションをデプロイするたびに、この問題に遭遇しました。 jarまたはクラスが壊れているようです。

  • まったく同じコードをコンパイルしている同僚が問題にぶつかることはありません。同じコンピューターにデプロイする場合でも。 (gitmavenを使用)
  • ローカルMavenリポジトリを削除しています~/.m2と再構築は役に立ちません。
  • 同じ桟橋アプリをローカルで問題なく実行できます。
  • 私の最初の疑いは、一部のjarが壊れていることでした。試しましたjar tvf $every_jar、何も見つかりませんでした。

これをデバッグするにはどうすればよいですか?本当に不思議に見え、いくつかのファイルが破損しているのではないかと思います。

Stack trace:
2014-10-21 13:29:25.123:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/XYZ/},/XYZ/webapps/root
javax.servlet.ServletException: jersey-serlvet
        at org.Eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.Java:553)
        at org.Eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.Java:344)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.Java:791)
        at org.Eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.Java:265)
        at org.Eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.Java:1242)
        at org.Eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.Java:717)
        at org.Eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.Java:494)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.Java:39)
        at org.Eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.Java:186)
        at org.Eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.Java:494)
        at org.Eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.Java:141)
        at org.Eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.Java:145)
        at org.Eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.Java:56)
        at org.Eclipse.jetty.util.Scanner.reportAddition(Scanner.Java:615)
        at org.Eclipse.jetty.util.Scanner.reportDifferences(Scanner.Java:540)
        at org.Eclipse.jetty.util.Scanner.scan(Scanner.Java:403)
        at org.Eclipse.jetty.util.Scanner.doStart(Scanner.Java:337)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.Java:121)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.Java:555)
        at org.Eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.Java:230)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.Java:81)
        at org.Eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.Java:58)
        at org.Eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.Java:96)
        at org.Eclipse.jetty.server.Server.doStart(Server.Java:282)
        at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
        at org.Eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.Java:1274)
        at Java.security.AccessController.doPrivileged(Native Method)
        at org.Eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.Java:1197)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:606)
        at org.Eclipse.jetty.start.Main.invokeMain(Main.Java:473)
        at org.Eclipse.jetty.start.Main.start(Main.Java:615)
        at org.Eclipse.jetty.start.Main.main(Main.Java:96)

に続く

Caused by:
Java.lang.ArrayIndexOutOfBoundsException: 6241
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at com.Sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.Java:133)
        at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.Java:86)
        at com.Sun.jersey.core.util.Closing.f(Closing.Java:71)
        at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:83)
        at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:80)
        at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:80)
        at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scan(FileSchemeScanner.Java:71)
        at com.Sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.Java:223)
        at com.Sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.Java:139)
        at com.Sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.Java:80)
        at com.Sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.Java:104)
        at com.Sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.Java:78)
        at com.Sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.Java:89)
        at com.Sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.Java:700)
12
Jakozaur

あなたの2つのエラーについて..

javax.servlet.ServletException: jersey-serlvet

これは、WEB-INF/web.xmlにタイプミスがあることを意味します

これは..

Java.lang.ArrayIndexOutOfBoundsException: 6241
    at org.objectweb.asm.ClassReader.<init>(Unknown Source)

新しいコンパイル済みのJavaバイトコードでasm.jarの古いバージョンを使用しているときにも、同様のものが見られます。

  • Java 11バイトコードの場合、asm 7.0 +を使用します)
  • Java 10バイトコードの場合、asm 6.1 +を使用します)
  • Java 9バイトコードの場合、asm 6.0 +を使用します)
  • Java 8バイトコードの場合、asm 5.0.1 +を使用します)
  • Java 6またはJava 7バイトコードの場合、asm 3.1を使用します。 asm 5.xもここで機能することを知っている必要があります)

asm.jar(またはorg.objectweb.asm.jar)が最新であることを確認してください。

クラス自体が悪いという、あまり一般的ではない問題があります。 1つのJDK(IBMなど)でコンパイルされ、別のJava(Sun/Oracleなど))で実行されるクラスで見られることがあります。

これの実際の例は icu4j-2.6.1.jarおよびそのcom/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class jarエントリ です。

21
Joakim Erdfelt

Jetty-maven-pluginの新しいバージョンを使用してください。

詳細情報-> バグ419801-jdk8のasm5へのアップグレード

したがって、pom.xml このような:

<plugin>
    <groupId>org.Eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.3.0.M2</version>
</plugin>

GroupIdが「org.Eclipse.jetty」であることに注意してください。

11
vv314

私の場合、ASMライブラリバージョンを使用していて、Java 8ラムダ式をサポートしていないため、ASMライブラリを変更してJava 8をサポートするように変更するか、コード。

私の場合、Java 8ラムダ式を繰り返しに使用していて、forループに置き換えました

1
Gaurav Deshmukh

レガシーコードを維持しているときに同様の問題に遭遇しました。

サーブレットJerseyServletのServlet.init()が例外をスローしました
 
 type Exception report 
 
 message Servlet.init()がサーブレットJerseyServletが例外をスローしました
 
 descriptionサーバーで内部エラーが発生したため、このリクエストを実行できませんでした。 :サーブレットJerseyServletのServlet.init()が例外をスローしました
 org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:505)
 org.Apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.Java:103)
 org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:956)
 org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java :423)
 org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1079)
 org.Apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.Java:625)[ .___ _。] org.Apache.Tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.Java:316)
 Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
 Java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.Java:617)
 org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.Java:61)
 Java.lang.Thread.run(Thread.Java:745)
 root cause 
 
 Java.lang.ArrayIndexOutOfBoundsException 
 noteルートの完全なスタックトレース原因は、Apache Tomcat/7.0.65ログで確認できます。

Web.xmlのパッケージスキャン範囲を縮小して修正しました。たとえば、param-valueタグで以下のpackage_with_too_many_classesを削除すると、問題が修正されました。

<servlet>
   <servlet-name>JerseyServlet</servlet-name>
   <servlet-class>com.Sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
   <init-param>
       <param-name>com.Sun.jersey.config.property.packages</param-name>
       <param-value>package_with_too_many_classes;package_with_approciate_number_of_classes;org.codehaus.jackson.jaxrs</param-value>
   </init-param>
   <load-on-startup>2</load-on-startup>
 </servlet>
1
Popeye