2014-10-21 17 views
9

Bất cứ khi nào tôi triển khai ứng dụng jetty tôi nhấn vấn đề này. Có vẻ như một số jar hoặc lớp học bị hỏng.Lạ java.lang.ArrayIndexOutOfBoundsException ném vào khởi động jetty

  • Đồng nghiệp biên dịch cùng mã chính xác, không gặp vấn đề. Ngay cả khi triển khai vào cùng một máy tính. (chúng tôi sử dụng gitmaven)
  • Xóa kho lưu trữ maven cục bộ ~/.m2 và việc xây dựng lại không giúp ích gì.
  • Có thể chạy cùng một ứng dụng cầu nối cục bộ mà không gặp bất kỳ sự cố nào.
  • Nghi ngờ ban đầu của tôi là một số jar bị hỏng. Đã thử jar tvf $every_jar và không tìm thấy bất kỳ thứ gì.

Bất kỳ ý tưởng nào về cách tôi có thể gỡ lỗi này? Trông thực sự bí ẩn và tôi nghi ngờ là một số tập tin bị hỏng.

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) 

Tiếp theo

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) 

Trả lời

17

Đối với 2 lỗi của bạn ..

javax.servlet.ServletException: jersey-serlvet 

Điều này có nghĩa bạn có một lỗi đánh máy trong bạn WEB-INF/web.xml

Đối với cái này ..

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

Tôi đã nhìn thấy những điểm tương tự khi sử dụng phiên bản cũ của asm.jar với bytecode Java được biên dịch mới hơn.

  • Đối với Java bytecode 8, sử dụng asm 5.0.1+
  • Đối với Java 6 hoặc Java 7 bytecode, (Sử dụng asm 3.1 nếu bạn phải, nhưng biết rằng asm 5.x là cũng sẽ hoạt động tại đây)

Đảm bảo rằng asm.jar (hoặc org.objectweb.asm.jar) của bạn hiện tại.

Có một vấn đề ít phổ biến hơn khi bản thân lớp đó không tốt. Đôi khi được nhìn thấy với các lớp được biên dịch trong một JDK (như IBM) và sau đó chạy trên một Java khác (như Sun/Oracle).

Ví dụ thực tế về điều này sẽ là the icu4j-2.6.1.jar and its com/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class jar entry.

+0

Sử dụng Java 7 và asm 3.1. – Jakozaur

+0

Những gì bạn sử dụng cho JVM của mình không liên quan đến quét bytecode, lớp gây ra lỗi có thể là mã byte cao hơn JVM của bạn. (nói cách khác, lớp đang bị vấp có thể được biên dịch cho Java 8) –

+0

Các tính năng không được xử lý bởi ASM 3, đã được định nghĩa trong Java 7 và thậm chí nếu 'javac' không sử dụng chúng, bạn có thể gặp họ lúc chạy. Không có ý nghĩa gì khi đề xuất sử dụng phiên bản lỗi thời. Chỉ cần sử dụng ASM 5 cho các phiên bản * all *… – Holger

8

Sử dụng phiên bản plugin jetty-maven mới hơn.

Thông tin chi tiết ->Bug 419801 - Upgrade to asm5 for jdk8

Vì vậy, sửa pom.xml của bạn như thế này:

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

Lưu ý groupId là "org.eclipse.jetty".

+1

Cảm ơn, điều này đã giải quyết nó cho tôi! Xem [phiên bản jetty-maven-plugin có sẵn] (http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin) trong Maven Central. – Jonik

+0

Nó hoạt động! cảm ơn u ~ – Wuaner

1

Tôi gặp phải vấn đề tương tự khi duy trì mã cũ.

 
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. 

Tôi đã sửa nó bằng cách giảm phạm vi quét gói trong web.xml. Ví dụ: xóa package_with_too_many_classes bên dưới trong thẻ param-value đã khắc phục sự cố.

<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

Điều này làm việc trong trường hợp của tôi. Tôi đã thêm các lớp non-servlet mới trong một gói con. Tôi đã thay đổi đường dẫn gói của họ và các lỗi đã biến mất. – jla

0

Trong trường hợp của tôi, tôi đang sử dụng phiên bản thư viện ASM và không hỗ trợ java 8 biểu thức lambda, do đó, hoặc bạn thay đổi thư viện ASM để hỗ trợ java 8 hoặc thay đổi mã của bạn.

Trong trường hợp của tôi, tôi đang sử dụng biểu thức lambda java 8 để lặp lại và tôi đã thay thế bằng vòng lặp

Các vấn đề liên quan