[ https://issues.apache.org/jira/browse/WSCOMMONS-165?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12472677 ]
Thilina Gunarathne commented on WSCOMMONS-165: ---------------------------------------------- You can create a patch using svn diff and attach it to this JIRA using the "attach file" link.. Make sure to tick the "grant license .. " radio button when attaching the patch.. > org.apache.axiom.om.impl.MIMEOutputUtils complete method does not flush > output Stream. End MIMEBoundary is not flushed to output stream. > ----------------------------------------------------------------------------------------------------------------------------------------- > > Key: WSCOMMONS-165 > URL: https://issues.apache.org/jira/browse/WSCOMMONS-165 > Project: WS-Commons > Issue Type: Bug > Components: AXIOM > Environment: JDK 1.5.0_09, Resin 3.0.21 or Tomcat 5.5, axis2-1.1.1, > windows > Reporter: Rob Sutter > Priority: Blocker > > The bug occurs while running a MTOM example that delivers MTOM attachments to > the client. The client calls the service and the service returns an > attachment via MTOM. The code worked correctly using axis2server but when > deployed on either Tomcat or Resin the response would exclude the END > MIMEBoundary (--MIMEBoundary--). This would cause various kinds of > unwanted behaviors like adding random bytes to the attachment, cached > attachments would grow without limit etc. > It appears the problem occurs because the complete method in MIMEOutputUtils > never flushes the output stream causing the END MIMEBoundary to get > truncated. Note the END MIME Boundary is written to the stream it just never > gets flushed. Adding flush to either the complete method as seen below > fixes the problem. > public static void complete(OutputStream outStream, > StringWriter writer, LinkedList > binaryNodeList, > String boundary, String contentId, String > charSetEncoding,String SOAPContentType) { > try { > startWritingMime(outStream, boundary); > javax.activation.DataHandler dh = new > javax.activation.DataHandler(writer.toString(), > "text/xml; charset=" + charSetEncoding); > MimeBodyPart rootMimeBodyPart = new MimeBodyPart(); > rootMimeBodyPart.setDataHandler(dh); > rootMimeBodyPart.addHeader("content-type", > "application/xop+xml; charset=" + charSetEncoding + > "; type=\""+SOAPContentType+"\";"); > rootMimeBodyPart.addHeader("content-transfer-encoding", "binary"); > rootMimeBodyPart.addHeader("content-id","<"+contentId+">"); > writeBodyPart(outStream, rootMimeBodyPart, boundary); > Iterator binaryNodeIterator = binaryNodeList.iterator(); > while (binaryNodeIterator.hasNext()) { > OMText binaryNode = (OMText) > binaryNodeIterator.next(); > writeBodyPart(outStream, > createMimeBodyPart(binaryNode > .getContentID(), (DataHandler) > binaryNode > .getDataHandler()), boundary); > } > > finishWritingMime(outStream); > //ADDED FLUSH > HERE TO FLUSH OUTSTREAM > outStream.flush(); > } catch (IOException e) { > throw new OMException("Error while writing to the OutputStream.", > e); > } catch (MessagingException e) { > throw new OMException("Problem writing Mime Parts.", e); > } > } > NOTE: I did not verify why it works correctly on axis2server but I suspect it > is because it DOES NOT use the AxisServlet that is used when the axis2 is > deployed on a real servlet container. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]