我正在为我的应用程序制作一个简单的RESTful API。我在项目中制作了另一个程序包(另一个是我的主要Java类,Servlet和模型所在的程序包)。然后,我制作了非常简单的资源文件,看起来像这样:
package com.java.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("webservice")
public class ZipcodeService {
@GET
@Path("/lookup")
public Response lookup() {
return Response.ok().entity("Los Angeles").build();
}
}
这是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" id="WebApp_ID"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<display-name>parking-space-booking-system</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.java.api</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
我不使用Maven。我正在使用Netbeans IDE和Tomcat服务器。我将Jersey 2.25的所有jar文件上传到WEB-INF / lib文件夹。我正在尝试使用web.xml进行修复,但我没有其他想法。这是我的项目的结构:
这也是我收到的错误消息:
HTTP状态500-Servlet Jersey Web应用程序的Servlet.init()抛出异常
类型异常报告
Servlet Jersey Web应用程序的message Servlet.init()抛出异常
说明服务器遇到内部错误,导致服务器无法满足此请求。
例外
javax.servlet.ServletException:Servlet Jersey Web应用程序的Servlet.init()引发异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:673) org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1500) org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748)
根本原因
java.lang.NoSuchMethodError:org.glassfish.jersey.CommonProperties.getValue(Ljava / util / Map; Ljavax / ws / rs / RuntimeType; Ljava / lang / String; Ljava / lang / Object; Ljava / lang / Class ;)Ljava / lang / Object; org.glassfish.jersey.jackson.JacksonFeature.configure(JacksonFeature.java:69) org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:674) org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:610) org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:800) org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:367) org.glassfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:162) org.glassfish.jersey.server.ApplicationHandler $ 3.run(ApplicationHandler.java:304) org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:289) org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:286) org.glassfish.jersey.internal.Errors.process(Errors.java:315) org.glassfish.jersey.internal.Errors.process(Errors.java:297) org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:301) org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:311) org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169) org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:673) org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1500) org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748)
note Apache Tomcat / 8.0.27日志中提供了根本原因的完整堆栈跟踪。 Apache Tomcat / 8.0.27
答案 0 :(得分:1)
您需要查看(并发布)Tomcat日志。查看catalina.out
。在我看来,您的web.xml没有结束的web-app标签,但这可能只是因为您没有发布完整的web.xml。
此外,您需要将应用程序打包为WAR文件。 Tomcat希望您的Web应用程序WAR文件位于webapps
目录下。
编辑:
找不到该方法,因此相应的JAR实际上不在类路径(lib文件夹)上。
org.glassfish.jersey.CommonProperties.getValue
答案 1 :(得分:1)
也许您的库有问题。
root cause
java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue(..
服务器初始化表示您忘记添加一些库(也许它不在您的Jersey 2.25中,请检查它)。您也可以尝试使用另一个版本的Jersey。