Struts的action自动装配到spring容器可能出现异常的解决方法
2013-11-17 08:14
543 查看
Struts在与Spring整合是要实现Struts的action自动装配到spring容器中,我们经常遇到的问题是:java.lang.NullPointException这个空指针异常,我碰到的有这么几种解决方案:
1.看一下你的set方法是否存在。
2.是否在web.xml中配置了“当web项目启动的时候,让spring扫描整个项目。”,当然也要加上一个名为:struts-spring-plugin***.jar的包,这个包实现了action装配到spring的功能。(如果已经加了这个包,也配置了web.xml还出现空指针异常,那么可能是你的struts-spring-plugin***.jar的版本不配套,还几个版本试试)
web.xml中添加的配置(添加在Struts配置的前面):
当你已经完成上面描述的配置的时候,还可能出现下面的这个异常,异常信息如下(这个是浏览器报的异常,后台没有异常,服务器启动正常):
仔细看异常信息,好像是在说“自动装配的时候用到了代理类,并且发生了类型转换异常的信息”,上网查的时候,说是存在实现接口的关系,就有可能报这种错误:
(我的项目中,有UserServiceImpl 实现了UserService这个接口,我估计这就是出现异常的地方)在网上查解决方案,最后得到了答案:在Action类中将UserServiceImpl类型的属性改变为其实现的父接口的类型,即UserService。将Action改了下,下面代码所示:
其中,UserServiceImpl是Action类的一个成员变量(属性),将它的类型改为器父接口的形式UserService类型,切记:你的方法名字必须和你对应的bean的名字保持一致(struts会自动扫描,然后加载),我的一个bean的明字为:userServiceImpl所以我的方法名为getUserSerbvceImpl和setUserServiceImpl,按照我这种做法,你就不需要在Action中添加@component,@Scape和@Resource这几个注解了(自动装配)。
关于第二个异常,详情请看:http://grey2.iteye.com/blog/994926。
这个异常困扰了我很长时间,写出来给需要的人。
祝你成功。。。
1.看一下你的set方法是否存在。
2.是否在web.xml中配置了“当web项目启动的时候,让spring扫描整个项目。”,当然也要加上一个名为:struts-spring-plugin***.jar的包,这个包实现了action装配到spring的功能。(如果已经加了这个包,也配置了web.xml还出现空指针异常,那么可能是你的struts-spring-plugin***.jar的版本不配套,还几个版本试试)
web.xml中添加的配置(添加在Struts配置的前面):
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:bean.xml</param-value> </context-param>
当你已经完成上面描述的配置的时候,还可能出现下面的这个异常,异常信息如下(这个是浏览器报的异常,后台没有异常,服务器启动正常):
Struts Problem Report Struts has detected an unhandled exception: Messages: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found Failed to convert property value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found Unable to instantiate Action, com.zsq.wxssh.action.LoginAction, defined for 'Login' in namespace '/'Failed to convert property value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found File: org/springframework/beans/TypeConverterDelegate.java Line number: 231 Stacktraces Unable to instantiate Action, com.zsq.wxssh.action.LoginAction, defined for 'Login' in namespace '/'Failed to convert property value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found 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) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) java.lang.Thread.run(Thread.java:724) org.springframework.beans.TypeMismatchException: Failed to convert property value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:391) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1289) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1250) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:329) com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:203) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:183) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:154) 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) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) java.lang.Thread.run(Thread.java:724) java.lang.IllegalArgumentException: Cannot convert value of type [com.sun.proxy.$Proxy8 implementing com.zsq.wxssh.service.UserService,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.zsq.wxssh.serviceimpl.UserServiceImpl] for property 'userServiceImpl': no matching editors or conversion strategy found org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231) org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138) org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1289) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1250) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:329) com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:203) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:183) com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:154) 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) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) java.lang.Thread.run(Thread.java:724)
仔细看异常信息,好像是在说“自动装配的时候用到了代理类,并且发生了类型转换异常的信息”,上网查的时候,说是存在实现接口的关系,就有可能报这种错误:
(我的项目中,有UserServiceImpl 实现了UserService这个接口,我估计这就是出现异常的地方)在网上查解决方案,最后得到了答案:在Action类中将UserServiceImpl类型的属性改变为其实现的父接口的类型,即UserService。将Action改了下,下面代码所示:
private UserService userServiceImpl; public UserService getUserServiceImpl() { return userServiceImpl; } //@Resource(name="userServiceImpl")//这里struts和spring整合,spring会自动扫描Action的属性,然后自动注入。 public void setUserServiceImpl(UserService userService) { this.userServiceImpl = userService; }
其中,UserServiceImpl是Action类的一个成员变量(属性),将它的类型改为器父接口的形式UserService类型,切记:你的方法名字必须和你对应的bean的名字保持一致(struts会自动扫描,然后加载),我的一个bean的明字为:userServiceImpl所以我的方法名为getUserSerbvceImpl和setUserServiceImpl,按照我这种做法,你就不需要在Action中添加@component,@Scape和@Resource这几个注解了(自动装配)。
关于第二个异常,详情请看:http://grey2.iteye.com/blog/994926。
这个异常困扰了我很长时间,写出来给需要的人。
祝你成功。。。
相关文章推荐
- Struts的Action自动装配到Spring 容器的配置
- Struts2+Spring3 设置默认自动装配action需要注意的细节
- Struts 2在Action中获取Spring容器中所有Bean实例名称的方法
- struts+spring+hibernate整合出现的问题解决方法
- 整合struts+spring+jpa中出现的解决方法
- 整合struts+spring+jpa中出现的解决方法
- Spring使用session,request,global sessiong作用域出现异常解决方法
- 使用spring4.1 hibernate4.1 struts2.1 Tomcat8 部署项目异常解决方法
- java struts+spring,自动装配action中的变量
- struts hibernate spring 环境配置时出现 HTTP Status 404 Servlet action is not available (解决方法)
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- org.apache.struts.action.InvalidCancelException异常解决方法
- 出现 org.springframework.beans.factory.BeanCreationException 异常的原因及解决方法
- 整合struts+spring+jpa中出现的解决方法
- Servlet自动注入Spring容器中的Bean解决方法
- 整合Spring+Hibernate+Struts时抛Servlet action is not available异常解决
- VS2010调试时出现“0x7556d36f 处最可能的异常: 0x000006BA: RPC 服务器不可用”的解决方法
- 出现 HTTP Status 500 - Servlet.init() for servlet springmvc threw exception 异常的原因及解决方法
- Struts应用出现的错误及解决方法:There is no Action mapped for namespace / and action name login
- Hadoop中操作HDFS出现异常的解决方法