2014-10-21 4 views
9

Immer wenn ich Jetty-Anwendung bereitstellen, traf ich dieses Problem. Sieht aus wie jar oder Klasse ist kaputt.Seltsame java.lang.ArrayIndexOutOfBoundsException geworfen auf Anlegesteg Start

  • Kollegen, die genau gleichen Code kompilieren, trifft das Problem nicht. Auch wenn die Bereitstellung auf demselben Computer erfolgt. (wir verwenden git und maven)
  • Löschen lokalen Maven Repository ~/.m2 und Wiederaufbau hilft nicht.
  • Kann dieselbe Anlegesteg-App lokal ohne Probleme ausführen.
  • Mein erster Verdacht war, dass einige jar gebrochen ist. Versucht jar tvf $every_jar und habe nichts gefunden.

Irgendwelche Ideen, wie kann ich das debuggen? Sieht wirklich mysteriös aus und ich vermute, dass einige Dateien beschädigt werden.

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) 

gefolgt von

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) 

Antwort

17

Für Ihre 2 Fehler ..

javax.servlet.ServletException: jersey-serlvet 

Dies bedeutet, dass Sie in Ihrem WEB-INF/web.xml

Wie für diesen einen Tippfehler haben ..

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

Ich habe ähnliche gesehen, wenn Sie eine alte Version von asm.jar mit neueren kompilierten Java-Bytecode verwenden.

  • für Java 8 Bytecode verwenden asm 5.0.1+
  • Für Java 6 oder Java 7 Bytecode (Verwenden asm 3.1 wenn muss man aber wissen, dass asm 5.x ist auch hier zur Arbeit gehen)

Stellen Sie sicher, dass Ihre asm.jar (oder) aktuell ist.

Es gibt ein etwas weniger häufiges Problem, bei dem die Klasse selbst schlecht ist. Manchmal mit Klassen gesehen, die in einem JDK (wie IBM) kompiliert und dann auf einem anderen Java (wie Sun/Oracle) ausgeführt werden.

Ein reales Beispiel wäre the icu4j-2.6.1.jar and its com/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class jar entry.

+0

Verwenden Java 7 und asm 3.1. – Jakozaur

+0

Was Sie für Ihre JVM verwenden, ist für das Scannen von Bytecodes irrelevant. Die Klasse, die den Fehler verursacht, könnte einen höheren Bytecode als Ihre JVM haben. (Mit anderen Worten, die Klasse, die ausgelöst wird, könnte für Java kompiliert werden 8) –

+0

Die Features, die nicht von ASM 3 behandelt werden, sind bereits in Java 7 definiert und selbst wenn 'javac' sie nicht verwendet, könnten Sie dies tun begegne ihnen zur Laufzeit. Es hat keinen Sinn, eine veraltete Version zu verwenden. Verwenden Sie einfach ASM 5 für * alle * Versionen ... – Holger

8

Verwenden Sie eine neuere Version von Jetty-Maven-Plugin.

Weitere Informationen ->Bug 419801 - Upgrade to asm5 for jdk8

So bearbeiten Sie Ihre pom.xml wie folgt aus:

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

Notiere die groupId ist "org.eclipse.jetty".

+1

Danke, das hat es für mich gelöst! Siehe verfügbare [jetty-maven-plugin-Versionen] (http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin) in Maven Central. – Jonik

+0

Es funktioniert! danke ~ – Wuaner

1

Ich stieß auf ähnliches Problem bei der Pflege von Legacy-Code.

 
Servlet.init() for servlet JerseyServlet threw exception 

type Exception report 

message Servlet.init() for servlet JerseyServlet threw exception 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Servlet.init() for servlet JerseyServlet threw exception 
    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 The full stack trace of the root cause is available in the Apache Tomcat/7.0.65 logs. 

Ich habe es mit der Reduzierung der Paket Scan-Bereich in web.xml behoben. Zum Beispiel wurde das Problem durch Entfernen der Paket_with_too_many_classes im param-value-Tag behoben.

<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> 
+0

Das funktionierte in meinem Fall. Ich hatte neue Nicht-Servlet-Klassen in einem Unterpaket hinzugefügt. Ich änderte ihren Paketpfad und die Fehler verschwanden. – jla

0

In meinem Fall bin ich mit ASM-Bibliothek Version und nicht Java 8 Lambda-Ausdruck unterstützen, also entweder Sie ASM-Bibliothek ändern Java 8 oder ändern Sie Ihren Code zu unterstützen.

In meinem Fall bin ich mit Java 8 Lambda-Ausdruck für Iterieren und ich ersetzte sie durch for-Schleife

Verwandte Themen