使用OpenEJB通过构造函数在JAX-RS资源中注入命名服务



我使用OpenEJB作为应用程序服务器,我想部署一个Jax RS资源,该资源需要在其构造函数中注入一些命名服务。

我的资源看起来像:

@Singleton
@Path("/")
public class Resource {
    private Service service;
    @Inject
    public Resource(@Named("service") Service service) {
        this.service = service;
    }
}

不幸的是,OpenEJB抱怨,因为它认为我的构造函数无效,因为@Named注释修饰了Service参数。

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支持它吗?

JAX-RS对无args构造函数有特定的要求。任何JAX-RS impl都是如此,它并不特定于OpenEJB集成。

最新更新