简体   繁体   中英

RESTful API - Getting HTTP 500 error all the time

I am making a simple RESTful API to my application. I've made another package in my project (other from one where is my main java class, servlet, and model). And then I've made my resource file, very simple which looks like this:

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();
    }
}

and this is my 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>

I am not using Maven. I am using Netbeans IDE and Tomcat server. I uploaded Jersey 2.25 all jar files to WEB-INF/lib folder. I am experimenting with web.xml to fix it but I have no more ideas. Here is the structure of my project:

在此处输入图片说明

Here is also my error message I got:

HTTP Status 500 - Servlet.init() for servlet Jersey Web Application threw exception

type Exception report

message Servlet.init() for servlet Jersey Web Application threw an exception

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

exception

javax.servlet.ServletException: Servlet.init() for servlet Jersey Web Application threw exception 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)

root cause

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.ja va: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.Thread PoolExecutor.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 The full stack trace of the root cause is available in the Apache Tomcat/8.0.27 logs. Apache Tomcat/8.0.27

You need to look in (and post) your Tomcat logs. Look at catalina.out . It looks to me like your web.xml doesn't have a closing web-app tag, but that might just be because you didn't post the full web.xml.

Also, you need to package your application as a WAR file. Tomcat expects your web application WAR file to be located under the webapps directory.

edit:

the method wasn't found, therefore the appropriate JAR isn't actually on the classpath (lib folder).

org.glassfish.jersey.CommonProperties.getValue

Perhaps you have problems with your libraries.

root cause

java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue(..

by the server initialisation shows that you forgot to add some library (perhaps it's not in your Jersey 2.25, check for it). Your can also try to use another version of Jersey.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM