Google app engine CDI/Weld无法进行RESTEasy资源的构造函数注入

Google app engine CDI/Weld无法进行RESTEasy资源的构造函数注入,google-app-engine,cdi,resteasy,jboss-weld,weld,Google App Engine,Cdi,Resteasy,Jboss Weld,Weld,我试图将RESTEasy与AppEngine上的Weld结合起来,但在进行构造函数注入时遇到了麻烦 我添加了RESTEasy CdiInjectorFactory上下文参数和Weld servlet侦听器 我的RESTEasy应用程序类如下所示: public class MyApplication extends Application { @Override public Set<Class<?>> getClasses() { Ha

我试图将RESTEasy与AppEngine上的Weld结合起来,但在进行构造函数注入时遇到了麻烦

我添加了RESTEasy CdiInjectorFactory上下文参数和Weld servlet侦听器

我的RESTEasy应用程序类如下所示:

public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(CustomerResource.class);
        return classes;
    }
}
CustomerService是一种简单的服务,如:

public class CustomerService {

    public List<Customer> getCustomers() {
        ..
    }
}
从这个日志中,我可以看到我的RESTEasy应用程序和resources类被发现了。请注意,我没有看到任何关于CustomerService的提及

当我在浏览器中访问我的资源时,我得到:

[INFO] 2014-01-30 21:47:26 DEBUG org.jboss.resteasy.cdi.CdiInjectorFactory:68 - Using CdiConstructorInjector for class class com.mycomp.config.MyApplication.
[INFO] 2014-01-30 21:47:26 DEBUG org.jboss.resteasy.cdi.CdiConstructorInjector:68 - Beans found for class com.mycomp.config.MyApplication : [Managed Bean [class com.mycomp.config.MyApplication] with qualifiers [@Any @Default]]
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Deploying javax.ws.rs.core.Application: class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Adding class resource com.mycomp.rest.app.CustomerResource from Application class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Adding class resource com.mycomp.rest.HeartbeatResource from Application class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] Jan 30, 2014 9:47:26 PM com.google.appengine.tools.development.ApiProxyLocalImpl log
[INFO] SEVERE: javax.servlet.ServletContext log: unavailable
[INFO] java.lang.RuntimeException: Could not find constructor for class: com.mycomp.rest.app.CustomerResource
RESTEasy是否正在尝试创建一个新的CustomerResource实例,而不是从Weld中选取它

我还尝试了字段注入(而不是构造函数注入),然后我可以看到CustomerService被很好地注入到CustomerResource中


我只喜欢构造函数注入,不知道在使用Weld时RESTEasy资源类中是否支持这种注入?

JAX-RS要求rest资源使用无参数构造函数。您可以有其他构造函数,但也需要有无参数构造函数

[INFO] 2014-01-30 21:34:53 INFO  org.jboss.weld.Version:146 - WELD-000900: 2.1.2 (Final)
[INFO] 2014-01-30 21:34:53 WARN  org.jboss.weld.environment.servlet.Listener:137 - @Resource injection not available in simple beans
[INFO] 2014-01-30 21:34:54 INFO  org.jboss.weld.Bootstrap:199 - WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
[INFO] 2014-01-30 21:34:55 DEBUG org.jboss.resteasy.cdi.ResteasyCdiExtension:68 - Discovered CDI bean which is javax.ws.rs.core.Application subclass com.mycomp.config.MyApplication.
[INFO] 2014-01-30 21:34:55 DEBUG org.jboss.resteasy.cdi.ResteasyCdiExtension:68 - Bean class com.mycomp.config.MyApplication does not have the scope defined. Binding to @javax.enterprise.context.ApplicationScoped().
[INFO] 2014-01-30 21:34:55 DEBUG org.jboss.resteasy.cdi.ResteasyCdiExtension:68 - Discovered CDI bean which is a JAX-RS resource com.mycomp.rest.app.CustomerResource.
[INFO] 2014-01-30 21:34:55 DEBUG org.jboss.resteasy.cdi.ResteasyCdiExtension:68 - Bean class com.mycomp.rest.app.CustomerResource does not have the scope defined. Binding to @javax.enterprise.context.RequestScoped().
[INFO] 2014-01-30 21:34:55 INFO  org.jboss.weld.environment.servlet.Listener:147 - No supported servlet container detected, CDI injection will NOT be available in Servlets, Filters or Listeners
[INFO] 2014-01-30 21:34:56 WARN  org.jboss.weld.Interceptor:47 - WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
[INFO] 2014-01-30 21:34:56 WARN  org.jboss.weld.Interceptor:47 - WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
[INFO] 2014-01-30 21:47:26 DEBUG org.jboss.resteasy.cdi.CdiInjectorFactory:68 - Using CdiConstructorInjector for class class com.mycomp.config.MyApplication.
[INFO] 2014-01-30 21:47:26 DEBUG org.jboss.resteasy.cdi.CdiConstructorInjector:68 - Beans found for class com.mycomp.config.MyApplication : [Managed Bean [class com.mycomp.config.MyApplication] with qualifiers [@Any @Default]]
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Deploying javax.ws.rs.core.Application: class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Adding class resource com.mycomp.rest.app.CustomerResource from Application class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] 2014-01-30 21:47:26 INFO  org.jboss.resteasy.spi.ResteasyDeployment:82 - Adding class resource com.mycomp.rest.HeartbeatResource from Application class com.mycomp.config.MyApplication$Proxy$_$$_WeldClientProxy
[INFO] Jan 30, 2014 9:47:26 PM com.google.appengine.tools.development.ApiProxyLocalImpl log
[INFO] SEVERE: javax.servlet.ServletContext log: unavailable
[INFO] java.lang.RuntimeException: Could not find constructor for class: com.mycomp.rest.app.CustomerResource