我有一个在Struts2中开发的应用程序,它部署在JBoss 7.1.1上。我们使用CDI注入依赖项。
我在Struts.xml中包含了以下内容:<constant name="struts.objectFactory.cdi.jndiKey" value="java:comp/some/weird/BeanManagerReference" />
还包括cdi-api-1.0-SP1.jar和struts2-cdi-plugin-2.3.4.1.jar罐以及应用程序的其他必需jar。
间歇性地我得到以下异常,我的服务器需要重启才能解决这个问题。
Unable to instantiate Action, com.action.SearchAction, defined for 'searchAction' in namespace '/'null
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:316)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
root cause
javax.enterprise.inject.CreationException
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:343)
org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52)
org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:173)
org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:340)
org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:33)
org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:45)
org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:85)
org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:125)
org.jboss.weld.bean.ManagedBean.createInstance(ManagedBean.java:333)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.produce(ManagedBean.java:200)
org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:289)
org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:61)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:616)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:681)
org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:118)
org.jboss.weld.util.Beans.injectBoundFields(Beans.java:703)
org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:712)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:161)
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:157)
org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:131)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:153)
org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:290)
org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:61)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:616)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:681)
org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:118)
org.jboss.weld.util.Beans.injectBoundFields(Beans.java:703)
org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:712)
org.jboss.weld.manager.SimpleInjectionTarget$1.proceed(SimpleInjectionTarget.java:106)
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
org.jboss.weld.manager.SimpleInjectionTarget.inject(SimpleInjectionTarget.java:102)
org.apache.struts2.cdi.CdiObjectFactory.buildBean(CdiObjectFactory.java:163)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:151)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:121)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:297)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:397)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
请让我知道如何解决这个问题。
答案 0 :(得分:0)
问题是您在WAR文件中包含了应用服务器提供的JAR。不要包含CDI等的API jar。