Chaque fois que je déploie une application de jetée, je rencontre ce problème On dirait que jar
ou classe est cassé.
git
et maven
)~/.m2
et la reconstruction n'aident pas.jar
soit cassé. J'ai essayé jar tvf $every_jar
et je n'ai rien trouvé.Des idées comment puis-je résoudre ce problème? Cela semble vraiment mystérieux et je suppose que certains fichiers sont corrompus.
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)
suivi par
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)
Pour vos 2 erreurs ..
javax.servlet.ServletException: jersey-serlvet
Cela signifie que vous avez une faute de frappe dans votre WEB-INF/web.xml
Quant à celui-ci ..
Java.lang.ArrayIndexOutOfBoundsException: 6241
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
J'ai vu des exemples similaires en utilisant une ancienne version de asm.jar
avec du bytecode Java compilé plus récent.
Assurez-vous que votre asm.jar
(ou org.objectweb.asm.jar
) est à jour.
Il y a un problème un peu moins commun où la classe elle-même est mauvaise. Parfois vu avec des classes compilées dans un JDK (tel que IBM) puis exécutées sur un autre Java (tel que Sun/Oracle).
Un exemple concret de ceci serait le icu4j-2.6.1.jar
et son entrée de jarre com/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class
.
Utilisez une version plus récente de jetty-maven-plugin.
Plus d'informations -> Bug 419801 - Mise à niveau vers asm5 pour jdk8
Alors, éditez votre pom.xml
comme ceci:
<plugin>
<groupId>org.Eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
</plugin>
Notez que le groupId est " org.Eclipse.jetty ".
Dans mon cas, j'utilise la version de la bibliothèque ASM et ne supporte pas l'expression lambda Java 8. Vous devez donc modifier la bibliothèque ASM pour prendre en charge Java 8 ou modifier votre code.
Dans mon cas, j’utilise l’expression lambda Java 8 pour l’itération et je l’ai remplacée par la boucle for
Je suis tombé sur un problème similaire lors de la maintenance du code hérité.
Servlet.init () pour le servlet JerseyServlet a lancé une exception Type Rapport d'exception Message Servlet.init () pour le servlet JerseyServlet a lancé une exception description Le serveur a rencontré une erreur interne qui l’empêche de répondre à cette requête. exception javax.servlet.ServletException : Servlet.init () pour le servlet JerseyServlet a lancé une exception Org.Apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.Java:505) Org.Apache.catalina.valves.ErrorReportVe (ErrorReportValve.Java:103) Org.Apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.Java:956) Org.Pache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.Java : 423) Org.Apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.Java:1079) [.________ .___ _.] 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) Cause première racine Java.lang.ArrayIndexOutOfBoundsException Note La trace de pile complète de la racine cause est disponible dans les journaux Apache Tomcat/7.0.65.
Je l'ai corrigé en réduisant l'étendue de l'analyse des paquets dans web.xml. Par exemple, la suppression de package_with_too_many_classes ci-dessous dans la balise param-value a résolu le problème.
<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>