由Struts2Action代理和googlecode-jsonplugin产生的一个IllegalArgumentException异常问题

由Struts2Action代理和googlecode-jsonplugin产生的一个IllegalArgumentException异常问题
     大象前些时间在一个老系统上添加了一个功能,此系统框架非常老(Struts2.2.1.1+Spring2.5.6+ibatis2),所有的配置都写在XML里面。这次出现问题的地方也在XML,而且是在JSON返回结果上面。
     这是一个后台的系统,因为增加权限拦截器,采用Struts2拦截器的方式拦截请求,在方法上加注解,判断是否有权限。其中有的请求是通过Ajax发送的,自定义拦截器拦截之后需要返回无权限结果给前台页面,而系统使用的是googlecode-jsonplugin这个插件与struts2整合。而JSON提示信息使用java.io.PrintWriter输出,result只有一个name和type,这时问题就来了,执行后发现 抛出com.googlecode.jsonplugin.JSONException:java.lang.IllegalArgumentException 异常。
     上层框架的封装已经不知道找谁问了,大象经过层层代码的跟踪发现是因为在代理类里对返回的result用反射的方式调用了它,而配置文件里面是这样写的
     < result name="no_permission_async" type="json">

     </ result >
     googlecode-jsonplugin 这个包封装返回的json结果,它有个root属性,如果什么都没有,这时root就为空,在调用的时候就出现IllegalArgumentException异常了,如果加上下面这些,问题解决
     < result name="no_permission_async" type="json">
          < param name="root">jsonObject</param>
          < param name="noCache">true</param>
          < param name="ignoreHierarchy">false</param>
    </ result >
     第一个是必须的,后面两个可选 。我估计现在还在这样用的应该很少了,写出来也是想作个笔记,因为当时搜索的时候发现全是另外一个异常情况,希望能给需要的人一个帮助。
     本文为菠萝大象原创,如要转载请注明出处。 http://www.blogjava.net/bolo

你可能感兴趣的:(由Struts2Action代理和googlecode-jsonplugin产生的一个IllegalArgumentException异常问题)