es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quarkus 2.5: @Inject dentro de la subclase de la aplicación JAX-RS ya no funciona

Después de actualizar Quarkus de 1.6.1.Final a 2.5.Final, el siguiente @Inject falla dentro de la subclase javax.ws.rs.core.Application:

@ApplicationScoped
public class MyBean {

public String foo() {
    return "bar";
}

}

@ApplicationPath("/")
public class MyApplication extends Application {

@Inject
MyBean myBean;

@Override
public Set<><?>> getClasses() {
    myBean.foo(); // Causa NPE en Quarkus 2.5.Final, funcionaba bien con 1.6.1.Final

}

}

Intenté con CDI.current().select(MyBean.class).get() pero obtuve Unable to locate CDIProvider.

¿Hay alguna otra solución alternativa que pueda intentar? Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la inicialización de CDI en Quarkus 2.5.Final. Una posible solución alternativa podría ser usar @Inject Instance en lugar de inyectar directamente MyBean. Aquí tienes una versión actualizada de la clase MyApplication usando @Inject Instance:

    @ApplicationPath("/")
    public class MyApplication extends Application {
    
        @Inject
        Instance<mybean> myBeanInstance;
    
        @Override
        public Set<><?>> getClasses() {
            MyBean myBean = myBeanInstance.get();
            myBean.foo();
        }
    }
    

    Usando la interfaz Instance, puedes verificar si el bean está disponible antes de obtener una instancia de él. Esto debería ayudar a evitar cualquier NullPointerException causada por problemas de inicialización de CDI.

    Alternativamente, puedes intentar actualizar tu implementación de CDI a una versión compatible con Quarkus 2.5.Final. Ten en cuenta que Quarkus tiene una lista de implementaciones de CDI admitidas, por lo que debes verificar si tu implementación actual es compatible.

Comments are closed.