java - Jersey 2.x 和 Tomcat8 返回 NullPointerException,HTTP 状态 500

标签 java maven tomcat jersey tomcat8

我正在尝试为 Android 应用程序制作一个简单的休息服务,但我似乎无法让它工作。我收到 404(如果我使用 servlet 2.5 和 glassfish.servletcontainer)或带有 http 状态 500 的 Nullpointer,如果我使用 servlet 3.0,则出现此错误消息。我想不通这个问题。

我想我混合了 Jersey 1 和 2,但我不知道在哪里。

错误看起来像这样:

java.lang.NullPointerException
org.apache.catalina.loader.WebappClassLoaderBase.binaryNameToPath(WebappClassLoaderBase.java:2495)
org.apache.catalina.loader.WebappClassLoaderBase.findLoadedClass0(WebappClassLoaderBase.java:2711)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1184)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
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:522)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
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: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)

我的 web.xml 如下所示:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

<servlet>
    <servlet-name>EndPoint</servlet-name>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>EndPoint</servlet-name>
    <url-pattern>/REST/*</url-pattern>
</servlet-mapping>

Pom 依赖:

<dependencies>

    <!-- Jax RS -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0.1</version>
    </dependency>

    <!-- Jersey 2.23.2 -->

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey2.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey2.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey2.version}</version>
    </dependency>

..和简单的java类:

@ApplicationPath("/EndPoint")
public class EndPoint extends Application{

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Response getMsg() {
       return Response.status(200).entity("hai!").build();
    }
}

最佳答案

将您的 EndPoint 类更改为:

@Path("/endpoint")
public class EndPoint{

@GET
@Produces(MediaType.TEXT_PLAIN)
public Response getMsg() {
   return Response.status(200).entity("hai!").build();
}
}

让我们假设 EndPoint类(class)在 com.test包,因此您需要将 web.xml 配置更改为:

<servlet>
<servlet-name>Jersey REST Service</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.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

关注<param-value>com.test</param-value>在 web.xml 中。它决定 Jersey 应该在哪里搜索你的 Rest 类。

关于java - Jersey 2.x 和 Tomcat8 返回 NullPointerException,HTTP 状态 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401756/

相关文章:

android - 我的android项目中使用android-maven-gradle-plugin的aar依赖错误

java - 将项目的所有库和文件放在一个文件夹中

Tomcat6 忽略 META-INF/context.xml

linux - 使用 rotatelogs 旋转 catalina.out?

java - Eclipse 和 postgres JDBC 连接

java - Java Volatile Read 到底做了什么?

java - 如何找到 FileItemIterator 返回的 FileItemStream 的编码?

java - @Temporal 优于@Column columnDefinition 吗?

java - Spring Boot 的 application.properties 的 Autowiring 在 Tomcat 中部署时抛出 NPE

带有抽象继承错误的Spring Autowired