[
https://issues.apache.org/jira/browse/WSCOMMONS-165?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rob Sutter updated WSCOMMONS-165:
---------------------------------
I'll try and submit this as a patch if I can figure out the the patch
contribution protocol - Rob
> 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]