premature close of stream in XLSTResult
---------------------------------------
Key: WW-2551
URL: https://issues.apache.org/struts/browse/WW-2551
Project: Struts 2
Issue Type: Bug
Components: Core Actions
Affects Versions: 2.0.11
Environment: Struts-2.0.11
Reporter: Martin Gainty
Priority: Critical
//2 streams are created from same Response
//when the stream is closed the writer for the second becomes non-operational..
public void execute(ActionInvocation invocation) throws Exception {
long startTime = System.currentTimeMillis();
String location = getStylesheetLocation();
if (parse) {
ValueStack stack = ActionContext.getContext().getValueStack();
location = TextParseUtil.translateVariables(location, stack);
}
try {
HttpServletResponse response = ServletActionContext.getResponse();
/************************HERE is a PrintWriter object that can return character
data to the client*************************/
Writer writer = response.getWriter();
// Create a transformer for the stylesheet.
Templates templates = null;
Transformer transformer;
if (location != null) {
templates = getTemplates(location);
transformer = templates.newTransformer();
} else
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setURIResolver(getURIResolver());
String mimeType;
if (templates == null)
mimeType = "text/xml"; // no stylesheet, raw xml
else
mimeType =
templates.getOutputProperties().getProperty(OutputKeys.MEDIA_TYPE);
if (mimeType == null) {
// guess (this is a servlet, so text/html might be the best
guess)
mimeType = "text/html";
}
response.setContentType(mimeType);
Object result = invocation.getAction();
if (exposedValue != null) {
ValueStack stack = invocation.getStack();
result = stack.findValue(exposedValue);
}
Source xmlSource = getDOMSourceForStack(result);
// Transform the source XML to System.out.
/*************************Why a second writer ..whats wrong with
writer???********************************/
PrintWriter out = response.getWriter();
LOG.debug("xmlSource = " + xmlSource);
transformer.transform(xmlSource, new StreamResult(out));
/*************************TROUBLE here closing The character-output stream of
this PrintWriter. **************/
out.close(); // ...and flush...
if (LOG.isDebugEnabled()) {
LOG.debug("Time:" + (System.currentTimeMillis() - startTime) +
"ms");
}
/************Whats this flush doing here the character output-stream is already
closed!************/
writer.flush();
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.