Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以使用CDI在Jersey 1.x中@Injection类吗?_Java_Jersey_Glassfish 3_Cdi_Jersey 1.0 - Fatal编程技术网

Java 我可以使用CDI在Jersey 1.x中@Injection类吗?

Java 我可以使用CDI在Jersey 1.x中@Injection类吗?,java,jersey,glassfish-3,cdi,jersey-1.0,Java,Jersey,Glassfish 3,Cdi,Jersey 1.0,我想我是在问这个问题,但对于Jersey 1.x: 我用的是GlassFish3,CDI和Jersey 1.x。我有一个@WebService,它正在注入这样一个类: @Inject Foo foo; 我已经在@WebService中测试过了,它可以正常工作。但是我的Jersey资源中的同一行代码在尝试使用foo时抛出一个NPE。我认为Jersey 1.x忽略了CDI注释。如何让依赖项注入像在@WebService中那样工作 Foo是一个pojo,my web.xml正在使用ServletCo

我想我是在问这个问题,但对于Jersey 1.x:

我用的是GlassFish3,CDI和Jersey 1.x。我有一个
@WebService
,它正在注入这样一个类:

@Inject
Foo foo;
我已经在
@WebService
中测试过了,它可以正常工作。但是我的Jersey资源中的同一行代码在尝试使用
foo
时抛出一个NPE。我认为Jersey 1.x忽略了CDI注释。如何让依赖项注入像在
@WebService
中那样工作

Foo
是一个pojo,my web.xml正在使用ServletContainer:

<servlet>
    <servlet-name>JerseyServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

球衣
com.sun.jersey.spi.container.servlet.ServletContainer

我找到了。问题是我的
Foo
@Inject
有自己的bean(它们实际上是来自一个类的EJB,其中包含
@提供的
)<代码>resourceContext.getResource(Foo.class)
返回
Foo
的一个实例,但是
Foo
@Inject
ed字段为空。

我发现这解释了如何执行此操作:

这里的问题是,CDI不适合实例化依赖项。 他们的[sic]是解决此问题的两种解决方案:

  • 让CDI实例化依赖项,但让Jersey管理它 这可以通过使用
    @ManagedBean
    和特定于Jersey的注释来实现
  • 让CDI实例化依赖项并让CDI管理它。 这可以通过使用
    @RequestScoped
    或其他特定于CDI的注释来实现
  • 我选择了第一个选项,并将
    javax.annotation.ManagedBean
    注释放在我的资源上:

    *我还发现了这篇官方文章,实际上没有那么有用:

    package com.coderskitchen.thegreeter.rest;
    
    import com.coderskitchen.thegreeter.greetings.GreetingService;
    
    import javax.annotation.ManagedBean;
    import javax.inject.Inject;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    
    @Path("/greet")
    @ManagedBean
    public class Greeter {
        @Inject
        GreetingService gs;
        @GET
        @Path("{name}")
        public String greetSomeone(@PathParam("name") String name) {
            return gs.greetSomeone(name);
        }
    }