簡體   English   中英

在Tomcat上實現Jersey時出現“ javax.servlet.ServletException:java.lang.NoClassDefFoundError”

[英]“javax.servlet.ServletException: java.lang.NoClassDefFoundError” when implementing Jersey on Tomcat

當我嘗試使用(“ sudo service tomcat7 start”)在Linux服務器上的Tomcat上實現以下方法時,除此方法外,所有其他方法均能正常工作。

@GET
    @Path("getapk")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response getApk() {
        System.out.println("GetApk!");
        final File apkFile = new File(apkFileLocation).listFiles()[0];
        return Response.ok(
                    new StreamingOutput() {
                        public void write(OutputStream output) throws IOException,
                        WebApplicationException {
                            output.write(Files.readAllBytes(apkFile.toPath()));
                        }
                    }
                ).header("Content-Disposition", ContentDisposition.type("attachment").fileName(apkFile.getName()).build())
                .build();
    }

奇怪的是,當我在Eclipse中“在服務器上運行”時,此方法可以正常工作。

以下是我收到的錯誤消息:

HTTP狀態500-

類型例外報告

信息

描述服務器遇到內部錯誤(),導致服務器無法滿足此請求。

例外

javax.servlet.ServletException:java.lang.NoClassDefFoundError:robertlee / resource / EcgCloudDatabase $ 1 com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)com.sun.jersey.spi.container。 servlet.ServletContainer.service(ServletContainer.java:538)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)根本原因

java.lang.NoClassDefFoundError:robertlee / resource / EcgCloudDatabase $ 1 robertlee.resource.EcgCloudDatabase.getApk(EcgCloudDatabase.java:691)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethod) )sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:606)com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke(JavaMethodInvokerFactory.java: 60)com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch( ResourceJavaMethodDispatcher.java:75)com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule。 java:147)com.sun.jersey.server.imp l.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)com.sun.jersey.server.impl。 uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)com.sun.jersey.server.impl.application.WebApplicationImpl。 _handleRequest(WebApplicationImpl.java:1442)com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java: 1381)com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)com.sun。 jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)根本原因

java.lang.ClassNotFoundException:robertlee.resource.EcgCloudDatabase $ 1 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)robertlee。 resource.EcgCloudDatabase.getApk(EcgCloudDatabase.java:691)sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethod:43) )java.lang.reflect.Method.invoke(Method.java:606)com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke(JavaMethodInvokerFactory.java:60)com.sun.jersey.server.impl.model。 method.dispatch.Abs​​tractResourceMethodDispatchProvider $ ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)com.sun.jersey.server。內含 i.rules.HttpMethodRule.accept(HttpMethodRule.java:302)com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)com.sun.jersey.server.impl.uri。 rules.ResourceClassRule.accept(ResourceClassRule.java:108)com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)com.sun.jersey.server.impl.uri.rules。 RootResourceClassesRule.accept(RootResourceClassesRule.java:84)com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl。 java:1442)com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)com。 sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java :538)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)注意根本原因的完整堆棧跟蹤在Apache Tomcat / 7.0.26日志中可用。

Apache Tomcat / 7.0.26

請幫助,非常感謝。

您需要在WEB-INF / lib中包含包含類robertlee/resource/EcgCloudDatabase的jar,然后重新創建部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM