`
t8500071
  • 浏览: 112895 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于Xwork异常 : Unable to instantiate Action

阅读更多

今天在测试刚写完的代码时,当触发到某一action时,发现webwork抛出以下异常:

 

[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,而把它放在其它方法里.

 

 

分享到:
评论
1 楼 zdz8207 2009-12-15  
原来是Action对象实例在ActionContext对象实例之前创建的,所有这样取得ActionContext容器对象就有可能会返回null.
因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里调用ActionContext,而把它放在其它方法里.

看来初始化action参数的时候就不能用到servlet的方法了(我是在初始化上传附件路径的时候出现这种错误的)

相关推荐

    Struts2源代码 包含struts-core和xwork-core源码

    - XWork的核心类`ActionSupport`是所有Struts2 Action的基类,包含了默认的错误处理和验证机制。 - XWork的`OgnlValueStack`是表达式语言OGNL(Object-Graph Navigation Language)在Struts2中的实现,用于在...

    XWork: Core 2.2.3 API

    详细介绍了XWork: Core 2.2.3的api,欢迎下载。

    xwork-2.1.5-all.rar_xwork_xwork-2.1.5_xwork-2.1.5.jar_xwork-core

    XWork支持XML和注解两种方式进行配置,XML主要用于定义Action和Interceptor的配置,而注解则为轻量级开发提供了便利,可以直接在Action类或方法上添加注解来指定其行为。 5. **XWork-2.1.5的改进**: 版本2.1.5对...

    xwork官网源码 下载 xwork

    XWork是一个强大的Action框架,它为Java Web应用程序提供了模型-视图-控制器(MVC)模式的支持。这个框架的主要目标是简化企业级应用的开发,提高代码的可维护性和可扩展性。在本篇文章中,我们将深入探讨XWork的...

    OpenSymphony公司的xwork资源包

    OpenSymphony公司的xWork资源包是一款为Java开发者量身打造的重要工具,主要用于构建企业级Web应用程序。这个资源包的核心是XWork框架,它是Struts2框架的基础,旨在提供一种灵活且可扩展的方式来管理应用程序的行为...

    xwork-2.1.2.rar_xwork-2.1.2_xwork-core_xwork-core-2.1.2_xwork2.1

    XWork是Struts2的核心库,提供了许多底层功能,包括动作调度、类型转换、异常处理和国际化支持等。这个压缩包"**xwork-2.1.2.rar**"包含了XWork框架的版本2.1.2,它是Struts2的重要组成部分。 **XWork核心组件详解...

    OGNL和XWORK源代码

    5. **结果类型(Result)**:Action执行后,根据返回的结果类型,XWork会决定如何渲染响应,如重定向、转发或显示特定的视图。 6. **动态方法调用**:XWork支持动态方法调用,使得Action方法可以根据配置的名称动态...

    xwork2.1.2源码与xwork2.2.1源码

    xwork作为一个强大的Action框架,是Struts2的核心组成部分,它提供了动作处理、类型转换、数据校验等功能,对于Java Web开发者而言,理解其源码有助于提升对MVC架构的理解和应用能力。本文将围绕xwork 2.1.2和2.2.1...

    XWork源码+docs全

    4. **结果管理**:Action执行完毕后,XWork会根据配置的Result类型决定如何展示结果,可以是重定向、转发、渲染JSP页面等。 5. **对象容器**:XWork内置了ObjectContainer,可以用于管理依赖注入,实现对象的生命...

    xwork源文件及文档

    4. **结果(Result)**:Action执行后,通常会有一个结果(Result)。XWork支持多种结果类型,如转发、重定向、流结果等,这使得Action执行后的控制流程更加灵活。 5. **事件驱动模型**:XWork基于事件驱动模型,当...

    xwork-core源码

    10. **Exception Handler**:xwork-core提供了一套异常处理机制,当Action执行过程中发生异常时,可以根据预先配置的策略进行处理,如显示错误页面、记录日志等。 以上是xwork-core的主要知识点,理解并熟练运用...

    Xwork完整源代码

    6. **结果与视图**:Action执行后,通常会返回一个结果,这与视图层(如JSP、FreeMarker)相结合,呈现响应。`com.opensymphony.xwork2.Result`接口定义了结果的通用行为。 7. **国际化与本地化**:Xwork支持多语言...

    所有xwork2源代码

    6. **异常处理**:XWork2提供了一套完整的异常处理机制,允许开发者定义如何处理Action执行过程中抛出的异常。这包括捕获特定类型的异常并返回特定的结果,或者全局统一处理异常。 7. **国际化与本地化**:XWork2...

    xwork源码(全)

    1. **Action管理**:XWork提供了一种Action管理模式,允许开发者定义并执行Action。Action是业务逻辑的载体,处理用户的请求并返回相应的结果。 2. **拦截器机制**:XWork引入了拦截器(Interceptor)的概念,这是...

    xwork 2.1.6

    4. **异常处理**:XWork提供了一套完整的异常处理机制,可以捕获和处理Action执行过程中可能出现的错误。 5. **结果映射**:通过结果映射,开发者可以定义Action执行后返回的视图,如跳转到某个JSP页面或者返回JSON...

    struts2 的类库 xwork 源码

    5. **结果(Result)**:Action执行完毕后,通常会返回一个结果,这可以是跳转到一个新的页面、重定向、或者渲染一个模板。XWork支持多种结果类型,如JSP、FreeMarker等。 6. **配置管理**:XWork使用XML或注解来...

    完整的xwork源代码

    5. **结果(Result)**:Action执行完毕后,通常会返回一个结果,这个结果可能是重定向、转发、视图渲染等。XWork中的Result接口定义了如何处理这些结果。 6. **配置管理**:XWork的配置文件通常为`xwork.xml`,在...

    xwork源码及文档

    它能够处理Action的异常,并根据异常类型决定如何返回结果。 6. **动态方法调用**:XWork支持动态方法调用,这意味着Action可以有多个执行方法,而无需预先硬编码在配置文件中。这增加了代码的灵活性和可维护性。 ...

    xwork-2.0.4 源码

    xwork对异常处理进行了封装,当Action执行过程中抛出异常时,会根据配置的异常处理策略进行处理。此外,xwork支持国际化,可以方便地切换不同语言环境,为用户提供多语言支持。 七、总结 通过对xwork-2.0.4源码的...

Global site tag (gtag.js) - Google Analytics