org.glassfish.hk2.api.UnsatisfiedDependencyException:Injectee没有可用于注射的物体

时间:2014-01-21 17:38:33

标签: java dependency-injection jersey jersey-2.0 hk2

我是Jersey 2的新手。到目前为止,我曾与Jersey 1.x和Spring合作,并希望使用HK2实现。

在阅读tutorial后,我写了以下内容:

@ManagedBean
@Path("products")
@Produces({ MediaType.APPLICATION_JSON })
public class ProductResource {

    @Inject
    ProductManager productManager;

    @GET
    public GenericResponseData<List<Product>> getProducts(@QueryParam("condition") Condition condition, @QueryParam("keywords") String keywords) {
        GenericResponseData<List<Product>> res = new GenericResponseData<List<Product>>();
        res.setObject(productManager.getProducts(condition, keywords));
        return res;
    }

}
@Contract
public interface ProductManager {
    public List<Product> getProducts(Condition condition, String keywords);
}

@Service
public class MyProductManager implements ProductManager {
    @Override
    public List<Product> getProducts(Condition condition, String keywords) {
            return null;
        }
}

但是我得到以下例外:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee

有什么问题?

3 个答案:

答案 0 :(得分:5)

我正在玩JAXRS和@Injecting EJB并得到同样的错误。有了@EJB,它运行良好。

解决方案是添加CDI配置文件并更改bean-discovery-mode =&#34;注释&#34; to bean-discovery-mode =&#34; all&#34;

之后我可以在我的EJB中使用@Inject。

这也可能对你有帮助。

答案 1 :(得分:1)

我假设上面的@Service注释是hk2 @Service,在这种情况下你应该知道@Service在Jersey中不能自动运行。相反,你需要在一些Jersey绑定器中添加一个类似于绑定(MyProductManager).to(ProductManager)的绑定

答案 2 :(得分:0)

检查@Contract界面中ProductManager的包裹。泽西岛(@Contract)和HK2(@Contract)都有这个名称的注释。

请务必查看“泽西用户指南”: