2014-01-21 2 views
1

Я новичок в Jersey 2. До сих пор я работал с Jersey 1.x и Spring и хотел бы использовать реализацию HK2.org.glassfish.hk2.api.UnsatisfiedDependencyException: Не было объекта для инъекций в Injectee

После прочтения 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 

Что не так?

ответ

0

Проверьте свой номер @Contract в вашем интерфейсе ProductManager. И Джерси (@Contract), и HK2 (@Contract) имеют аннотацию с этим именем.

Убедитесь, чтобы взглянуть также на Джерси Руководстве пользователя:

+0

Я пробовал аннотацию и аннотацию HK2, и это не сработало :( – Dejell

1

Я предполагаю, что аннотация @Service выше является hk2 @Service в этом случае вы должны знать, что @ Сервис не работает автоматически в Джерси. Вместо этого вам нужно будет добавить привязку, которая будет выглядеть как привязка (MyProductManager) .to (ProductManager) в некотором связующем звене Джерси

+0

ye, я добавил привязку, но задаюсь вопросом, почему @Service не работает. – Dejell

+0

Джерси сделал выбор, чтобы использовать явные привязки поверх автоматических привязок. Это совершенно правильный выбор, поскольку он обеспечивает больше контроля для пользователя, но означает, что некоторые из автоматических функций hk2 (то есть @Service) не будут работать – jwells131313

+0

есть ли способ его сохранить, поскольку он дает много возможностей для воспроизведения aronund с кодом? – Dejell

5

Я играл с JAXRS и @ Inject-ing EJB и получал такую ​​же ошибку. С @EJB он работал нормально.

Решения был добавить файл конфигурация CDI и изменять боб-открытие-режим = «примечание» для боба-открытие режима = «все»

После того, что я мог бы использовать @Inject с моей EJB.

Это может помочь вам.

+0

Это решение перестает поднимать исключение , но инжектируемый объект будет пустым !!! (По крайней мере, для меня) – ehsun7b

+0

Работает для меня с тем же номером, что и плакат, и это то, о чем говорит спецификация. Просто забыли его в моем beans.xml. – ymajoros

+0

Это возможно для @Inject без beans.xml файла?Я хотел бы написать приложение, используя строго конфигурацию Java, как и для моих приложений Spring. –

Смежные вопросы