JAVA香滿世界

          我愛JAVA

          統(tǒng)計(jì)

          留言簿(2)

          閱讀排行榜

          評(píng)論排行榜

          (轉(zhuǎn))徹底解決webwork2.2.4和spring的集成問題-ERROR [http-8080-Processor25] (DispatcherUtils.java:237) - Could not execute action

          記得前些日子帖過一個(gè)大罵webwork2.2.4的帖子,其實(shí)那個(gè)問題后來解決了,為什么會(huì)突然說這個(gè)對(duì)于已經(jīng)是古老的問題呢?同事今天遷移平臺(tái)代碼,發(fā)現(xiàn)原來的那套程序怎么跑都是不能用,他開始搜索gg,居然找到了我的blog,我這才想起來我痛苦的那幾日,為了不讓其他xdjm犯同樣的錯(cuò)誤,所以決定仔細(xì)分析下,告訴大家來龍去脈,搞定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

          實(shí)際上這個(gè)問題簡(jiǎn)單描述為:當(dāng)webwork啟動(dòng)spring交互時(shí)卻發(fā)現(xiàn)spring的上下文是一個(gè)空值,怎么會(huì)呢?問題就出在webwork2.2.4最新的整合代碼里,之前的版本至少2.2.2是需要另外cp一個(gè)jar包才能進(jìn)行這種全整合的,而2.2.4的新特性之一就是已經(jīng)整合在了webwork里,但這恰恰是場(chǎng)惡夢(mèng)。原因來自于他的一個(gè)代碼缺陷。
          其實(shí)webwork的整合原來很簡(jiǎn)單,利用webwork的攔截器,首先他從內(nèi)存獲得spring的上下文,然后當(dāng)?shù)玫絘ctionbean的名字之后就從spring也得到這個(gè)注入bean的內(nèi)容,然后利用其中的屬性拷貝類,把spring內(nèi)的內(nèi)容復(fù)制到action上,就完成了所謂的整合。
          首先看webwork2.2.4的源代碼:
                 Map session = invocation.getInvocationContext().getSession();
                 ApplicationContext applicationContext = (ApplicationContext) session.get(ApplicationContextSessionListener.APP_CONTEXT_SESSION_KEY);
          大概意思就是從session中取得了context,不過他的方法是從攔截器里取得的,但這個(gè)方法鑒定下來是不行的,造成了applicationContext是一個(gè)Null!我們之前的錯(cuò)誤也是這里引起的。
          我參考了之前使用的一個(gè)webwork植入spring的類,其實(shí)方法完全一樣,也是通過取得上下文,然后利用beanuntilcopy屬性到action這樣的方法,下面來看看我修正過的代碼:
              Map session = invocation.getInvocationContext().getSession();
              ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
          如此簡(jiǎn)單就ok其實(shí)就是這個(gè)session對(duì)象的名字,我是參考了spring本身的webuntil里的寫法改寫的,這個(gè)應(yīng)該不會(huì)有任何問題。
          現(xiàn)在覆蓋上去看看是否ok了?問題解決。

          posted on 2007-04-10 18:30 chengjie 閱讀(1607) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邵阳市| 扶风县| 绥德县| 吉木乃县| 石嘴山市| 亚东县| 临澧县| 长汀县| 麻阳| 天峻县| 石门县| 英山县| 留坝县| 泗阳县| 韶山市| 瑞安市| 霸州市| 洛扎县| 隆安县| 滁州市| 准格尔旗| 富阳市| 铜山县| 平凉市| 蓬安县| 长子县| 东光县| 贵港市| 道真| 小金县| 汶川县| 舒城县| 新兴县| 西乡县| 莫力| 钟山县| 大关县| 黎川县| 新泰市| 荥阳市| 赞皇县|