【问题标题】:Jersey app deployment errorJersey 应用程序部署错误
【发布时间】:2014-05-30 08:17:48
【问题描述】:

我有一个简单的基于球衣的 REST Web 服务,我正在尝试进行测试 GET 运行..

使用 Jersey 2.7 和 Servlet 3.0 容器,我尝试使用 jersey doc (JAX-RS application without an Application subclass

我已经定义了一个资源

@Path("/bolt")
public class SpringRequestResource extends BaseResource {

@GET
@Produces("text/plain")
public String getHello() {
    return "Hello World!";
}

而我的部署描述符 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">

<display-name>Alpha</display-name>

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>

</servlet>

<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/myService/*</url-pattern>
</servlet-mapping>
</web-app>

但是,在通过浏览器通过 url http://myName.xyz.com:6080/[projectName]/myService/bolt 抛出 GET 请求时 它抛出以下异常 -

javax.servlet.ServletException: Servlet.init() for servlet javax.ws.rs.core.Application threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
root cause

java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:270)
org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:218)
org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:448)
org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:309)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:168)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)

似乎无法找出这里的问题。

【问题讨论】:

    标签: rest jersey servlet-3.0


    【解决方案1】:

    我无法重现 Jersey 2.9 的问题。您可以尝试迁移到 Jersey 2.9。如果它没有帮助您可以在https://java.net/jira/browse/JERSEY 中创建一个新问题,因为这可能是一个错误而不是您的错。如果您可以附上一个简单的可重现测试用例(重现问题的简单可执行 maven 项目),那就太好了。

    解决方法是使用 Application 类的扩展或 ResourceConfig 来配置应用程序。

    【讨论】:

    • 我也遇到了 Jersey 2.9 的问题。最终,我不得不求助于使用 org.glassfish.jersey.servlet.ServletContainer 类定义 servlet 并将其传递给提供程序包的旧方法跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2013-09-07
    • 2017-12-20
    相关资源
    最近更新 更多