java - Jersey Web 服务返回 HTTP 500
问题描述
我正在尝试使用 Tomcat 部署基本的 REST Web 服务。当我在 Eclipse 中运行我的代码时,它可以工作,但是当我尝试在浏览器中访问该服务时,我得到:
Exception
javax.servlet.ServletException: Servlet.init() for servlet [JerseyDemo] threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1506)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:830)
Root Cause
java.lang.IllegalArgumentException
jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:153)
jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:424)
org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener.process(AnnotationAcceptingListener.java:170)
org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:908)
org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:862)
org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:768)
org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1199)
org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171)
org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1167)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:344)
org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:339)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:362)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1506)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:830)
这是我的pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tp9.demo</groupId>
<artifactId>JerseyDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>12</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<jersey2.version>2.19</jersey2.version>
<jaxrs.version>2.0.1</jaxrs.version>
</properties>
<dependencies>
<!--JAX-RS -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>${jaxrs.version}</version>
</dependency>
<!--Jersey 2.19 -->
<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>
</dependencies>
</project>
我的web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>Jersey Demo</display-name>
<servlet>
<servlet-name>JerseyDemo</servlet-name>
<!--Define ServletContainer of Jersey -->
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!--Define the package to search for classes -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.tp9.demo.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--Map all the URLs to the Jersey ServletContainer -->
<servlet-mapping>
<servlet-name>JerseyDemo</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
这个问题是否可能是由某些不兼容(Java、Tomcat、Jersey...)引起的,还是 .xml 文件有问题?
解决方案
当开发人员编写的代码出现问题时,Web 服务总是返回500 Internal Server Error 。请检查处理请求和响应的代码。因为这个问题是特定于论点的。
推荐阅读
- mongodb - 如何在数组 Mongoose 的对象中填充 2 个 id
- c++ - 带有自定义散列函数和比较谓词的 unordered_map 会产生编译错误
- c++ - 为什么在 x86 上除以 3 需要右移(和其他奇怪的东西)?
- r - 应用于 R 中数据帧的函数中的嵌套向量
- python - 如何连接两个 TF-IDF 向量以及可以输入模型的其他特征?
- asp.net-core - 如何为 UnauthorizedAccessException 创建过滤器
- java - RescaleOP 仅适用于图像的一半?
- python - AttributeError:模块“测试”没有属性“myfunc”
- reactjs - 我不明白这里的 useEffect 发生了什么
- node.js - Req.body 在 express 中的路由器内部未定义