我使用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支持?
答案 0 :(得分:1)
JAX-RS对no-args构造函数有特定要求。对于任何JAX-RS impl都是如此,它不是特定于OpenEJB集成的。