2014-02-10 6 views
2

У меня есть ExceptionMapper определяется следующим образомВводят синглтона в ExceptionMapper

@Provider 
public class MyExceptionMapper implements ExceptionMapper<Throwable> { 
    @Inject 
    private Manager myManager; 

    @Override 
    public Response toResponse(Throwable exception) { 
     // My implementation 
    } 
} 

Развертывание этого кода на GlassFish 4 результатов с исключением:

org.glassfish.hk2.api.UnsatisfiedDependencyException: 
There was no object available for injection at 
Injectee(requiredType=Manager,parent=MyExceptionMapper,qualifiers {}),position=-1,optional=false,self=false,unqualified=null,955636053) 

Когда я использую @Context вместо @Inject I не вижу исключения, но myManager имеет значение null Я попытался сделать MyManager как @ManagedBean, @Singleton или EJB (безстоящий, Singleton) и не работает

+0

http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0 –

+0

Спасибо за предложение. Но предлагаемое решение не совсем практично, так как мне нужно привязать все мои CDI-компоненты, которые мне нужно вводить внутри MyExceptionMapper (и есть зависимости) – hmashlah

+0

, где вы развертываете? GlassFish-4? –

ответ

0

В JEE6 (с помощью стеклянной рыбы 3) вы должны добавить

@javax.annotation.ManagedBean 

к реализации поставщика. Возможно, это работает и для Glassfish 4

Насколько я знаю, эти проблемы возникают из следующего. CDI не работает для управления зависимостями обслуживаемых служб и провайдеров по умолчанию. Но при добавлении @ManagedBean вы включаете CDI для создания экземпляра.

Здесь example, где я представил CDI для спокойного обслуживания с использованием трикотажа.

+0

Спасибо за предложение, но добавление ManagedBean в ExceptionMapper не помогло. – hmashlah

0

Вы можете использовать OmniFaces Beans, чтобы получить CDI удалось экземпляр боб в вашем ExceptionMapper:

Beans.getInstance(Bean.class) 

Я использую это с @javax.ejb.Stateless бобы, содержащие @javax.persistence.PersistenceContext.

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