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

时间:2016-04-18 07:20:33

标签: jax-rs cdi openejb

我使用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支持?

1 个答案:

答案 0 :(得分:1)

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