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

在JAX-RS(Jersey)资源中注入一个单例,作为Tomcat servlet

谷梁云瀚
2023-03-14

我正在尝试构建一个RESTful web服务。该组件是对已包含多个servlet的现有Tomcat7Web应用程序的添加。我用的是泽西2.25。

我需要实例化一些与现有系统相关的组件(对象)。我希望在应用程序加载时这样做一次,然后从每个资源中读取它们。

@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {

    public MyApplication() {
        packages("plc_webservice.PersonResource");

        register(new MyBinder());
    }
}

public class MyBinder extends AbstractBinder{

    @Override
    protected void configure() {
        bind(new MyService()).to(MyService.class);
    }
}
public class MyService {
    String name;

    public MyService() {
        name = "John";
    }

    public String getName() {
        return name;
    } 
}

和资源:

@Path("Person")
public class PersonResource {


    @Inject
    private MyService service;    

    @GET
    public String test() {
        String result = "Hello!";

        return result;
    }
}

我不明白为什么我会得到这个例外:

ServletException:一个MultiException有3个异常。他们是:1。org.glassfish.hk2.api.unsatisfiedDependencyException:在SystemInjecteeImpl(RequiredType=MyService,Parent=PersonResource,Qualifiers={},Position=-1,Optional=False,Self=False,Unqualified=Null,1688478701)2处没有可用于注入的对象。java.lang.IllegalArgumentException:尝试解析plc_webservice.PersonResource的依赖项时发现错误%3。java.lang.IllegalStateException:无法在plc_webservice.personResource上执行操作:resolve

org.glassfish.jersey.servlet.webcomponent.serviceImpl(webcomponent.java:489)org.glassfish.jersey.servlet.webcomponent.service(webcomponent.java:427)org.glassfish.jerse.servlet.servetcontainer.service(servletcontainer.java:388)org.glassfish.jerse.servlet.servetcontainer.service(servletcontainer.java:341)

MultiException有3个异常。他们是:1。org.glassfish.hk2.api.unsatisfiedDependencyException:在SystemInjecteeImpl(RequiredType=MyService,Parent=PersonResource,Qualifiers={},Position=-1,Optional=False,Self=False,Unqualified=Null,1688478701)2处没有可用于注入的对象。java.lang.IllegalArgumentException:尝试解析plc_webservice.PersonResource的依赖项时发现错误%3。java.lang.IllegalStateException:无法在plc_webservice.personResource上执行操作:resolve

谢谢你。

共有1个答案

都昊乾
2023-03-14

我认为这是CDI的问题。是否定义了beans.xml?此外,如果您希望myservice是一个单例,我认为您希望使用@applicationscoped对其进行注释。

 类似资料:
  • 例如,如果几个资源endpoint需要访问某个消息总线来处理请求,该怎么办?当然,当服务类本身不是资源但被资源使用时,有一些方法可以注册一个单例服务类并将其注入到资源中。 我看到的提供程序或自定义HK2绑定的所有示例都引用了资源。 我发现的最接近我所要找的是这个问题: 使用内置的Jersey依赖注入在Jersey 2中创建一个简单的单例类会遇到麻烦 请注意,编程方式将是最有用的,我没有使用xml文

  • 问题内容: 我正在通过DropWizard 0.7.1使用Jersey / JAX-RS公开RESTful服务端点。我所有的实体POJO都用JAX- RS和Hibernate / JSR-303 bean验证注释进行了注释,如下所示: 当资源方法接收到这些POJO之一作为输入时(实际上,DropWizard已经将HTTP实体JSON反序列化为一个实例),我想根据Hibernate / Bean V

  • 我正在通过DropWizard 0.7.1使用泽西/JAX-RS来公开RESTful服务endpoint。我已经用JAX-RS和HiberNate/JSR-303 bean验证注释注释了我所有的实体POJO,如下所示: 当资源方法接收到其中一个POJO作为输入时(在引擎盖下,DropWizard已经将HTTP实体JSON反序列化为

  • 我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-

  • service.java: sqlDataProvider.java: 如果在Glassfish服务器中部署此servlet并执行请求,将引发以下异常: 亲切地问候帕斯卡

  • 我在尝试用@Inject搭配JAX-RS。我的问题是@Inject只在Servlets中有效。在JAX资源中,我得到一个空指针,我不知道我做错了什么。我的代码如下所示: Pom.xml文件 豆类.xml 网页.xml包含: <代码> 工人阶级: 服务控制器。startTweetListener()和serviceController。stopTweetListener()工作。没有空指针。 非工人