внедрение именованной службы в ресурс JAX-RS конструктором с OpenEJB

Я использую OpenEJB в качестве сервера приложений и хочу развернуть ресурс Jax-RS, который требует, чтобы некоторая именованная служба была внедрена в его конструктор.

Мой ресурс выглядит так:

@Singleton
@Path("/")
public class Resource {

    private Service service;

    @Inject
    public Resource(@Named("service") Service service) {
        this.service = service;
    }
}

К сожалению, OpenEJB жалуется, потому что не считает мой конструктор допустимым из-за аннотации @Named, украшающей аргумент службы.

java.lang.RuntimeException: Resource class class test.Resource has no valid constructor
at org.apache.openejb.server.cxf.rs.CdiResourceProvider.validateConstructorExists(CdiResourceProvider.java:138)
at org.apache.openejb.server.cxf.rs.CdiResourceProvider.<init>(CdiResourceProvider.java:100)
at org.apache.openejb.server.cxf.rs.OpenEJBPerRequestPojoResourceProvider.<init>(OpenEJBPerRequestPojoResourceProvider.java:28)
at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deployApplication(CxfRsHttpListener.java:522)

Реализации OpenEJB CdiResourceProvider явно не нужно ничего, кроме аннотации Jax-RS @Context для аргументов конструктора... Поддерживается ли она OpenEJB?


person Guillaume Delafosse    schedule 18.04.2016    source источник


Ответы (1)


JAX-RS имеет особое требование для конструктора без аргументов. Это справедливо для любой реализации JAX-RS, а не для интеграции с OpenEJB.

person John Ament    schedule 18.04.2016