Struts 2 Action + getOutputStream()

Pessoal,

No Struts 2 eu tenho uma action que quero escrever um JSON de resposta no OutPutStream dela. Mas quando eu faço isto tenho um erro de retorno:

Minha action pai:

[code]
public abstract class ThabitActionBase extends ActionSupport implements Preparable , SessionAware, ServletResponseAware, ServletRequestAware {

private static final long	serialVersionUID	= 1L;

protected Log log = LogFactory.getLog(SystemAction.class);

private Map session;

protected HttpServletResponse	response;

protected HttpServletRequest	request;

public ThabitActionBase() {
}

@Override
public void prepare() throws Exception {

}

public Map getSession() {
	return session;
}

public void setSession(Map session) {
	this.session = session;
}

@Override
public void setServletResponse(HttpServletResponse res) {
	this.response = res;		
}

@Override
public void setServletRequest(HttpServletRequest req) {
	this.request = req;
}

public HttpServletResponse getServletResponse(){
	return this.response;
}

public HttpServletRequest getServletRequest(){
	return this.request;
}

}[/code]

Minha action verdadeira:

[code]
public class SystemAction extends ThabitActionBase {

private static final long	serialVersionUID	= 1L;

public String efetuarLogin( ) {
	
	log.debug("efetuarLogin:::"+getUsuarioId()+"="+getSenha());

// ActionContext.getContext().getSession().put(ThabitConstants.SESSION_USER_OBJECT, getUsuarioId() );
getSession().put(ThabitConstants.SESSION_USER_OBJECT, getUsuarioId() );

	if(getSession()!=null){
		log.debug("efetuarLogin:::COM SESSIONAWARE!");
	}
	
	HttpServletResponse resp = getServletResponse();
	ServletOutputStream out = null;	 
	if(resp!=null){
		try {
			out = resp.getOutputStream();
			JSONObject o = new JSONObject();
			o.put("nome", "Sérgio Berlotto Jr");
			System.out.println("JSON>>>>>>"+o.toString());
			out.print(o.toString());
			out.flush();
			out.close();
		} catch (IllegalStateException e) {
			log.error("IllegalStateException ESCREVENDO NO OUTPUT!");
		} catch (IOException e) {
			log.error("ERRO ESCREVENDO NO OUTPUT:",e);
		}
	}
	
	log.debug("efetuarLogin:::Agora na sessão!");
	return SUCCESS; <<--- AQUI ESTÀ O ERRO !
}

}[/code]

O erro que tenho de retorno:

23:36:49,996 DEBUG [SystemAction] efetuarLogin:::er=er
23:36:50,001 DEBUG [SystemAction] efetuarLogin:::COM SESSIONAWARE!
23:36:50,394 INFO  [STDOUT] JSON>>>>>>{"nome":"Sérgio Berlotto Jr"}
23:36:50,396 DEBUG [SystemAction] efetuarLogin:::Agora na sessão!
23:36:50,405 DEBUG [InstantiatingNullHandler] Entering nullPropertyValue [target=[com.thabit2.action.SystemAction@1653a31, com.opensymphony.xwork2.DefaultTextProvider@e05be2], property=org]
23:36:50,746 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
	at org.apache.catalina.connector.Response.getWriter(Response.java:604)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
	at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
	at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
	at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
	at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:178)
...

E o que chega na resposta é o erro…

Alguém sabe como faço para simplesmente escrever no outputstream de uma action no Struts2 ?

Obrigado…

Bom, eu mesmo vou responder !
O meu problema era o return SUCESS no action…

É que assim o Struts tentava escrever novamente no OutputStream gerando o erro…

se coloco return null, fico tudo na boa…

Desculpem-me pelo post, mas aos 46 do segundo tempo, antes de dormir, na ultima googlada me deu um estalo ! hehehe

Obrigado a todos !