You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2015/10/20 08:23:27 UTC
[jira] [Updated] (WW-3161) When using execAndWait interceptor,
getText() fails with npe (ActionContext.getContext() is null)
[ https://issues.apache.org/jira/browse/WW-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-3161:
------------------------------
Description:
I have a simple action that extends ActionSupport and uses the execAndWait interceptor.
In the "execute" method there is a {{getText("samekey")}} that fails with:
{noformat}
java.lang.NullPointerException
com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:318)
com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:191)
com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:106)
com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:80)
it.test.SimpleAction.execute(SimpleAction.java:10)
{noformat}
When using the default interceptor stack, it works fine.
My guess is that as the action context is threadlocal and as the execAndWait interceptor creates a new thread to handle the request... this new thread has no reference to the action context (infact {{ActionContext.getContext()}} returns null when using execAndWait)
Below the data to reproduce the problem:
*****************************
ACTION CLASS: it.test.SimpleAction
*****************************
{code:java}
package it.test;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class SimpleAction extends ActionSupport {
public String execute(){
System.out.println(ActionContext.getContext());
addActionMessage(getText("message.sample","ciao"));
return SUCCESS;
}
}
{code}
***********************
Struts config
************************
{code:xml}
<action name="simple" class="it.test.SimpleAction">
<interceptor-ref name="execAndWait" />
<result name="success">/simple.jsp</result>
</action>
{code}
***********************
simple.jsp
**********************
{code:xml}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple </title>
</head>
<body>
<s:actionmessage/>
</body>
</html>
{code}
was:
I have a simple action that extends ActionSupport and uses the execAndWait interceptor.
In the "execute" method there is a getText("samekey") that fails with:
java.lang.NullPointerException
com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:318)
com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:191)
com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:106)
com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:80)
it.test.SimpleAction.execute(SimpleAction.java:10)
When using the default interceptor stack, it works fine.
My guess is that as the action context is threadlocal and as the execAndWait interceptor creates a new thread to handle the request... this new thread has no reference to the action context (infact ActionContext.getContext() returns null when using execAndWait)
Below the data to reproduce the problem:
*****************************
ACTION CLASS: it.test.SimpleAction
*****************************
package it.test;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class SimpleAction extends ActionSupport {
public String execute(){
System.out.println(ActionContext.getContext());
addActionMessage(getText("message.sample","ciao"));
return SUCCESS;
}
}
***********************
Struts config
************************
<action name="simple" class="it.test.SimpleAction">
<interceptor-ref name="execAndWait" />
<result name="success">/simple.jsp</result>
</action>
***********************
simple.jsp
**********************
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple </title>
</head>
<body>
<s:actionmessage/>
</body>
</html>
> When using execAndWait interceptor, getText() fails with npe (ActionContext.getContext() is null)
> -------------------------------------------------------------------------------------------------
>
> Key: WW-3161
> URL: https://issues.apache.org/jira/browse/WW-3161
> Project: Struts 2
> Issue Type: Bug
> Components: Core Interceptors
> Affects Versions: 2.1.6
> Reporter: Gustavo De Sanctis
> Fix For: 2.3.x
>
>
> I have a simple action that extends ActionSupport and uses the execAndWait interceptor.
> In the "execute" method there is a {{getText("samekey")}} that fails with:
> {noformat}
> java.lang.NullPointerException
> com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:318)
> com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:191)
> com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:106)
> com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:80)
> it.test.SimpleAction.execute(SimpleAction.java:10)
> {noformat}
> When using the default interceptor stack, it works fine.
> My guess is that as the action context is threadlocal and as the execAndWait interceptor creates a new thread to handle the request... this new thread has no reference to the action context (infact {{ActionContext.getContext()}} returns null when using execAndWait)
> Below the data to reproduce the problem:
> *****************************
> ACTION CLASS: it.test.SimpleAction
> *****************************
> {code:java}
> package it.test;
> import com.opensymphony.xwork2.ActionContext;
> import com.opensymphony.xwork2.ActionSupport;
> public class SimpleAction extends ActionSupport {
> public String execute(){
> System.out.println(ActionContext.getContext());
> addActionMessage(getText("message.sample","ciao"));
> return SUCCESS;
> }
> }
> {code}
> ***********************
> Struts config
> ************************
> {code:xml}
> <action name="simple" class="it.test.SimpleAction">
> <interceptor-ref name="execAndWait" />
> <result name="success">/simple.jsp</result>
> </action>
> {code}
> ***********************
> simple.jsp
> **********************
> {code:xml}
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
> <%@taglib prefix="s" uri="/struts-tags"%>
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <title>Simple </title>
> </head>
> <body>
> <s:actionmessage/>
> </body>
> </html>
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)