JAVA香满世界

我爱JAVA

统计

留言簿(2)

阅读排行榜

评论排行榜

2007年4月10日 #

(转)彻底解决webwork2.2.4和spring的集成问题-ERROR [http-8080-Processor25] (DispatcherUtils.java:237) - Could not execute action

记得前些日子帖过一个大骂webwork2.2.4的帖子,其实那个问题后来解决了,为什么会突然说这个对于已经是古老的问题呢?同事今天迁移平台代码,发现原来的那套程序怎么跑都是不能用,他开始搜索gg,居然找到了我的blog,我这才想起来我痛苦的那几日,为了不让其他xdjm犯同样的错误,所以决定仔细分析下,告诉大家来龙去脉,搞定webwork2.2.x和spring的整合功能。

首先回放下问题:
ERROR [http-8080-Processor25] (DispatcherUtils.java:237) - Could not execute act
ion
java.lang.NullPointerException
       at com.opensymphony.webwork.spring.interceptor.SessionContextAutowiringI
nterceptor.findAutoWiringBeanFactory(SessionContextAutowiringInterceptor.java:68
)
       at com.opensymphony.webwork.spring.interceptor.SessionContextAutowiringI
nterceptor.before(SessionContextAutowiringInterceptor.java:57)
       at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(Around
Interceptor.java:30)
       at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIn

实际上这个问题简单描述为:当webwork启动spring交互时却发现spring的上下文是一个空值,怎么会呢?问题就出在webwork2.2.4最新的整合代码里,之前的版本至少2.2.2是需要另外cp一个jar包才能进行这种全整合的,而2.2.4的新特性之一就是已经整合在了webwork里,但这恰恰是场恶梦。原因来自于他的一个代码缺陷。
其实webwork的整合原来很简单,利用webwork的拦截器,首先他从内存获得spring的上下文,然后当得到actionbean的名字之后就从spring也得到这个注入bean的内容,然后利用其中的属性拷贝类,把spring内的内容复制到action上,就完成了所谓的整合。
首先看webwork2.2.4的源代码:
       Map session = invocation.getInvocationContext().getSession();
       ApplicationContext applicationContext = (ApplicationContext) session.get(ApplicationContextSessionListener.APP_CONTEXT_SESSION_KEY);
大概意思就是从session中取得了context,不过他的方法是从拦截器里取得的,但这个方法鉴定下来是不行的,造成了applicationContext是一个Null!我们之前的错误也是这里引起的。
我参考了之前使用的一个webwork植入spring的类,其实方法完全一样,也是通过取得上下文,然后利用beanuntilcopy属性到action这样的方法,下面来看看我修正过的代码:
    Map session = invocation.getInvocationContext().getSession();
    ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
如此简单就ok其实就是这个session对象的名字,我是参考了spring本身的webuntil里的写法改写的,这个应该不会有任何问题。
现在覆盖上去看看是否ok了?问题解决。

posted @ 2007-04-10 18:30 chengjie 阅读(1585) | 评论 (0)编辑 收藏