[ERROR] - [2009-03-12 14:27:59]: (ServletDispatcher.java:234)--Could not execute action
com.opensymphony.xwork.XworkException: Unable to instantiate Action, com.huawei.nsm.outsrc4.action.CertAction, defined for 'formDataQuery' in namespace '/outsrc4/cert'null
with nested exception
java.lang.NullPointerException
at com.opensymphony.xwork.DefaultActionInvocation.createAction(DefaultActionInvocation.java:220)
at com.opensymphony.xwork.DefaultActionInvocation.init(DefaultActionInvocation.java:272)
at com.opensymphony.xwork.DefaultActionInvocation.<init>(DefaultActionInvocation.java:65)
at com.opensymphony.xwork.DefaultActionInvocation.<init>(DefaultActionInvocation.java:58)
at com.opensymphony.xwork.DefaultActionProxyFactory.createActionInvocation(DefaultActionProxyFactory.java:32)
at com.opensymphony.xwork.DefaultActionProxy.prepare(DefaultActionProxy.java:124)
at com.opensymphony.xwork.DefaultActionProxy.<init>(DefaultActionProxy.java:75)
at com.opensymphony.xwork.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:45)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:227)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
.....
---
with nested exception java.lang.NullPointerException
java.lang.NullPointerException
at com.huawei.nsm.outsrc4.dao.impl.CertLogDaoImpl.<init>(CertLogDaoImpl.java:45)
at com.huawei.nsm.outsrc4.dao.impl.CertDaoImpl.<init>(CertDaoImpl.java:56)
......
---
原因是这一句
at com.huawei.nsm.outsrc4.dao.impl.CertLogDaoImpl.<init>(CertLogDaoImpl.java:45)
webwork 无法初始化CertLogDaoImpl对象 , 于是找到该类,发现如下语句:
private final static Log _log = LogFactory.getLog(CertLogDaoImpl.class);
private UserUtil userUtil = (UserUtil)ServletActionContext.getContext().getSession().get("userUtil");
CertLogDaoImpl对象包含一个 userUtil 的成员变量,在初始化CertLogDaoImpl对象时,会先初始化其成员变量,关键是这里,这个uerUtil成员变量使用了 action 的上下文"ServletActionContext.getContext()".
了解webwork中ServletDispatcher原理的人可能知道原因了, 因为ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装,再传给我们的XWork框架,由我们的XWork 框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action,返回执行结果。
因此每次客户端的请求都将调用ServletDispatcher 的 service()方法,
该方法执行顺序如下:
1、通过request请求取得action的命名空间
2、根据servlet请求的Path,解析出要调用该请求的Action的名字(actionName)
3、创建Action上下文(extraContext)
4、根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy
5、执行proxy的execute()方法,根据Action执行返回的值去调用执行相应的Result(返回结果处理)的方法。
现在应该能明白,原来是Action对象实例在ActionContext对象实例之前创建的,所有这样取得ActionContext容器对象就有可能会返回null.
因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里调用ActionContext,而把它放在其它方法里.
分享到:
相关推荐
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 通过控制台的...
SSH登录无实例化例子 SSH登录无实例化例子
1)第一种不是常驻型广播,也就是说广播跟随注册他的Activity的生命周期。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
WebService大讲堂之Axis2,多个实例,非常全的文档,从新手入门开始到复杂的实例
ar.com.tadp.xml.rinzo_0.9.0.zip eclipse xml 插件
dpoll ... 最初创建于 安装 $ python3 -m venv dpoll-env $ tmp source dpoll-env/bin/activate ...$ cd dpoll.xyz $ pip install -r requirements.txt $ touch dpoll/base/settings.py dpoll/base/local_settings.py ...
Unity3D教程:Prefabs与Instantiate1
学习使用Prefabs和instantiate使用方法!
{“success”:false,“message”:“Failed to instantiate the chaincode. cause:instantiate proposal resulted in an error :: Error: 2 UNKNOWN: chaincode error (status: 500, message: is not a valid ...
稳定的兔子 stablerabbit是一个用于Rabbitmq的库 ... log.Fatalf("unable to instantiate publisher: %s", err) } queueName := "shahin" if err = p.Publish(context.Background(), queueName
名称 WebService :: Pushover-Pushover ...) or die( "Unable to instantiate WebService::Pushover.\n" ); my %params = ( message => 'test test test', priority => 0, ); my $status = $push->message( %params
通过MediaExtractor抽取视频,然后再通过MediaMuxer产生视频文件
Yii 2.0.39.3+ PHP 7.0以上 安装 composer require bizley/deep-instantiate:^1.0 用法 直接-只需调用new \Bizley\DeepInstantiate\Container() 。全局-设置\Yii::$container = new \Bizley\DeepInstantiate\...
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.amqp.core.Queue]: Factory method 'clientQueue' threw exception; nested exception is org....
本文实例为大家分享了Unity中Instantiate实例化物体卡顿问题的解决方法,供大家参考,具体内容如下 一、前言 当在执行多次Instantiate实例化物体时,会卡顿严重甚至在移动端会导致程序崩溃 因为Instantiate会产生...
Lua scripts can use it to instantiate CLR objects, access properties, call methods, and even handle events with Lua functions. 里面包括最新的LUA源码及文档 还有一个.NET中使用LuaInterface的完整工程,...
discover the operations available on it, and to instantiate the appropriate bean to perform said operation(s). For example, if a browser obtained a JPEG image, this framework would enable the browser...
No Hibernate Session bound to thread,没有绑定线程解决办法,找了好久才找到的
Constructor scope altered to public for base class to instantiate.
Chapter 3 gets you to use C# to instantiate, use and control Rigidbody objects from your script as well as explosions. Chapter 4 explains how to create a simple weapon management system. You will ...