当前位置: 首页 > 知识库问答 >
问题:

为什么“java.lang.IllegalStateException:资源配置在此上下文中不可修改。”出现部署泽西应用程序?

微生良策
2023-03-14

我创建了一个在本地实现REST服务的应用程序,使用:

日蚀靛蓝球衣2.4 Tomcat 7.0.47

当使用Eclipse在本地运行时,服务工作正常,但是当部署我的WAR文件时,当我试图获取其中一个服务URL时,我得到以下异常:

HTTP Status 500 - Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception

type Exception report

message Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception

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

exception

javax.servlet.ServletException: Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    java.lang.Thread.run(Thread.java:662)

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:300)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
    javax.servlet.GenericServlet.init(GenericServlet.java:160)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    java.lang.Thread.run(Thread.java:662)

我还无法找到根本原因,我唯一的怀疑是,这可能是Eclipse中缺少运行依赖项或其他配置,这些配置与我自己的本地Tomcat服务器环境和远程服务器上的Tomcat不同。

我在资源配置类的代码是:

package com.app.rest;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;

import com.app.rest.services.RunDetailsService;
import com.app.rest.services.RunHistoryService;
import com.app.rest.services.RunPollService;
import com.app.rest.services.RunTestService;


@ApplicationPath("api")
public class MyResourceConfig extends ResourceConfig {

    public MyResourceConfig() {
        register(RunHistoryService.class).
        register(RunTestService.class).
        register(RunDetailsService.class).
        register(RunPollService.class);     
    }   
}

你认为可能的原因是什么?

共有3个答案

沈英勋
2023-03-14

就我而言,我有一个用于文件上传的泽西POST资源。资源指定了参数:@FormDataParam(“文件”)输入流文件

并消耗MediaType.MULTIPART_FORM_DATA。

为了解决这个问题,我必须将以下内容添加到我的web中的Jersey REST配置中。xml文件:

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
魏鸿哲
2023-03-14

我设法造成了同样的错误,这是由于两种情况:

>

  • 资源ws中的路径定义不能从“/xyz”开始,只能是“xyz”到ResourceConfig@ApplicationPath(“/”)

    也由于 .war 项目或雄猫/库中任何 API (jar) 的依赖性而发生。

    当以下日志中显示资源路径中存在歧义(重复相同的名称)时,也会发生这种情况:

    警告:资源模型对HTTP方法GET和输入mime类型具有不明确的(子)资源方法,如@消费者和@在Java方法公共javax.ws.rs.core.Response

    环境:Netbeans 8.1、Apache Tomcat 8.0.12、JAX-RS 2.0(泽西岛2.12)

  • 黎苑博
    2023-03-14

    一个可能的原因是,您有两个或多个适用于该 URL 调用的映射。

    例如:

    @路径(“/{myParam}”)

    在其他地方:

    @路径(“/{differentParam}”)

    现在Jersey无法判断实际应该调用什么方法并给出此错误。

     类似资料:
    • 我还无法找到根本原因,我唯一的怀疑是可能是缺少了运行依赖项或Eclipse中的其他配置,这些配置与我自己的本地Tomcat服务器环境和远程服务器上的Tomcat不同。 我在资源配置类中的代码是: 你觉得可能的原因是什么?

    • 我对Java相当陌生,正在进行我的第一个JPA项目,同时试图理解Netbeans创建的所有对象。我使用向导从数据库表中创建了一个“User”JPA实体。然后我去了AbstractFacade.java,那里有一个超级类,它添加了一个新方法,可以通过电子邮件地址找到特定的用户。 接下来,我UsersFacaceRest.java并添加了以下方法。我不知道为什么在这个例子中我需要@override,因

    • 我需要在Jersey ServletContainer中热部署和取消部署资源。 如果我看一下源代码: 从WebComponent构造函数引发ModelValidationException。之后,任何重新加载的调用都会导致onShutdown方法发生异常,这是由ServiceLocatorImpl的preDestroy方法中的checkState引起的。 我可以通过忽略验证错误来避免异常

    • 无法在weblogic服务器上部署jersey REST,是否存在特定于weblogic的REST服务配置? 完全堆栈跟踪- 2018年4月25日下午7:01:53。太阳运动衫服务器impl。应用WebApplicationImpl启动信息:启动泽西岛应用程序,版本“泽西岛:1.2 05/07/2010 02:11 PM”2018年4月25日7:01:53 PM com。太阳运动衫服务器impl。

    • 我想设置我的覆盆子Pi作为一个网络服务器。使用ngrok和node.js,我已经设置了服务器部分,我可以访问我在那里写的网页(前端)。 但是,后端部分给我带来了很多麻烦。我对此非常陌生,根据我通过的一些教程,我使用jersey作为后端。我创建了一个简单的测试来查看我的实现是否工作-通过POST请求发送一个用户名,并检查长度是否大于0。 我的JSP-

    • 问题内容: 我正在尝试使用Minikube,Docker Registry和演示节点项目创建本地Kubernetes部署。 我做的第一件事是安装Docker v1.12.3,然后是Minikube v0.12.2。 然后我通过运行此命令创建了一个Docker Registry容器(通过本教程,仅运行下面的第一个命令) 接下来,我运行此minikube命令以创建本地kubernetes集群: 我的项