ws-soap-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pavel Ausianik <>
Subject Using mime parts - huge drawbacks
Date Wed, 13 Nov 2002 14:04:00 GMT

thinking more on the current code I have found interesting thing. Most
requests we have a simple, straight SOAP envelopes, without any attachments.
Looking how it is processed I have found following (traced from

In SOAPHTTPConnection.send() we call
Let's look into it (see my comment how I understand it:

        String rootContentType = null;
// Root Part is Not set for Simple Envelope !

        if (ctx.isRootPartSet()) {
//... Not in use for simple case

        if (rootContentType == null)
            rootContentType = Constants.HEADERVAL_CONTENT_TYPE_UTF8;
        if (getEnvelope() != null) {

// Now really create root part - how important it is if we now how to write
this Envelope without involving Mime !!!

            ctx.setRootPart(envelope, rootContentType);
        } else {
//... Not in use for simple case

        // Print the whole response to a byte array.
// Tracing into this code we'll found that all it will do it add
unnecessary header to envelope 
// The headers include Content-Type - we know which is,
// Content-id  - do we need it? Even if yes we can create any id
// Content-Transfer-Encoding - not for HTTp, anyway we force it to 8 bit
// Content-Lenght - easy to calculate

        ByteArrayOutputStream payload =
            new ByteArrayOutputStream(1024);
        bytes = payload.toByteArray();

        // Now strip off the headers. (Grmbl, get rid of JavaMail
        // for MIME support). Just intercept the Content-Type
// Remove headers which created right now....


        // TODO: should not send for HTTP response
        headers.put("Accept-Encoding", "x-gzip");
        if (Boolean.TRUE.equals(ctx.getGzip())) {
            // Deflate
            ByteArrayOutputStream baos =
                               new ByteArrayOutputStream(bytes.length * 2);
            GZIPOutputStream gzos = new GZIPOutputStream(baos);
            gzos.write(bytes, offset, bytes.length - offset);
            bytes = baos.toByteArray();
            offset = 0;

            headers.put("Content-Encoding", "x-gzip");

Seems like we are doing wonderful job of running a lot unnecessary
operations,  involving a lot of memory allocations... It could be most
advanced improvement we ever done!

Best regards,

View raw message