There "might" be a fix for this now in Axis but its really still just "work in progress". I did try and test it out for tomcat 4.03 with chunking enabled (that should be the default). On the client side to avoid the reading of the attachment data twice do:
call.setScopedProperty(MessageContext.HTTP_TRANSPORT_VERSION,HTTPConstants.HEADER_PROTOCOL_V11); Hashtable myhttp= new Hashtable(); myhttp.put(HTTPConstants.HEADER_TRANSFER_ENCODING,HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED); call.setScopedProperty(HTTPConstants.REQUEST_HEADERS,myhttp); then use the call object to send the attachments. The server should also send the data back without reading the handlers twice. I need to add support for servlet engines that don't chunk and some other refinements. For the client side I strongly suggest you only do this for the attachment calls and revert back to HTTP 1.0 since it probably hasn't been tested to heavily. Rick Rineholt "The truth is out there... All you need is a better search engine!" [EMAIL PROTECTED] "Blumenkrantz, Jason" <[EMAIL PROTECTED]> on 04/05/2002 03:35:00 PM Please respond to [EMAIL PROTECTED] To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]> cc: Subject: RE: Bug in attachment handling / MimeUtils I realize that it isn't a great solution, and doesn't work in all environments, but the current way of reading from the input stream twice won't work in any environments. Any ideas for the right way to handle this? Thanks -Jason -----Original Message----- From: Ng, Charles [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 03, 2002 11:42 AM To: '[EMAIL PROTECTED]' Subject: RE: Bug in attachment handling / MimeUtils This makes the assumption that the servlet container will do HTTP chunking for you. I know Tomcat 3.2 does not. Charles -----Original Message----- From: Blumenkrantz, Jason [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 03, 2002 10:31 AM To: Axis-Dev (E-mail) Subject: Bug in attachment handling / MimeUtils I'm having a problem returning Attachments via Axis using the JAFDataHandlerSerializer and org.apache.axis.attachments.MimeUtils. The DataHandler is being returned fine and added as an attachment, but the content's mime part ends up empty. The problem seems to be in MimeUtils.getContentLength(), where if the DataSouce is not a file DataSource, the input stream is read in completely to determine the content length. Since my service returns a live InputStream and not a File, the stream is invalidated by the reading process. So not only is the stream read entirely into memory, but the attachment data is never being written out to the client. The two possible solutions I see to this problem would be to keep the in-memory buffer around and write that out instead of incorrectly reusing the InputStream (which is suboptimal, since this requires the entire stream to be read into memory), or in the case of MIME attachments which are not file attachments, to not write back the content length in the response at all. I've modified a copy of AxisServlet to never write the content length in this case, and it seems to work fine with both Axis and VS.NET clients. Anyone have ideas on the best way to fix the current incorrect behavior? Thanks, Jason Blumenkrantz [EMAIL PROTECTED] This message may contain privileged and/or confidential information. If you have received this e-mail in error or are not the intended recipient, you may not use, copy, disseminate or distribute it; do not open any attachments, delete it immediately from your system and notify the sender promptly by e-mail that you have done so. Thank you.