I have made some very minor changes in tcpmon.java to improve the
readability of some SOAP messages when XML formatting is enabled.  The
source changes have these effects:

      - keep start-tags and end-tags together on the same line when there
are no interveaning end-tags

      - suppress extra blank lines by not inserting 'formatting newline'
characters after 'input newline' characters

      - increase the indention width from one blank to three blanks

The source changes are attached below.  Are they of general interest?  If
so, how to I contribute them to the Axis project?

-- Edward Pring <[EMAIL PROTECTED]>




My source changes to tcpmon.java are these lines at the beginning of the
run() method ...

        public void run() {
            try {
                byte[]      buffer = new byte[4096];
                byte[]      tmpbuffer = new byte[8192];
                int         saved = 0 ;
                int         len ;
                int         i1, i2 ;
                int         i ;
                int         reqSaved = 0 ;

                final int tabWidth = 3; /*** added by Edward Pring ***/
                boolean atMargin = true; /*** added by Edward Pring ***/
                int thisIndent=-1, nextIndent=-1, previousIndent=-1 ; /*
changed by Edward Pring */
                inSocket.setSoTimeout(10 );
                outSocket.setSoTimeout(10 );

... and these changes in the middle of the run() method:

                    if ( xmlFormat ) { // Do XML Formatting
                        i2 = 0 ;
                        for( i1 = 0 ; i1 < len ; i1++ ) {
                            /*** begin removed by Edward Pring ...
                              if ( buffer[i1] != '<' && buffer[i1] != '/' )
                                tmpbuffer[i2++] = buffer[i1];
                            else {
                                if ( i1+1 < len ) {
                                    byte b1 = buffer[i1];
                                    byte b2 = buffer[i1+1];
                                    thisIndent = -1 ;
                                    if ( b1 == '<' ) {
                                        if ( b2 != '/' )  thisIndent =
nextIndent++ ;
                                        else              thisIndent =
--nextIndent ;
                                    }
                                    else if ( b1 == '/' ) {
                                        if ( b2 == '>' ) nextIndent-- ;
                                    }
                                    if ( thisIndent != -1 ) {
                                        tmpbuffer[i2++] = (byte) '\n' ;
                                        for ( i = 0 ; i < thisIndent ; i++
)
                                            tmpbuffer[i2++] = (byte) '+' ;
                                    }
                                    tmpbuffer[i2++] = buffer[i1];
                                }
                                else {
                                    // last char is special - save it
                                    saved = 1 ;
                                }
                            }
                            ... end removed by Edward Pring ***/

                            /*** begin added by Edward Pring ... */
                            if ( i1+1==len ) { saved = 1; break; }
                            thisIndent = -1;
                            if ( buffer[i1]=='<' && buffer[i1+1]!='/' ) {
                                previousIndent = nextIndent++;
                                thisIndent = nextIndent;
                            }
                            if ( buffer[i1]=='<' && buffer[i1+1]=='/' ) {
                                if (previousIndent>nextIndent) thisIndent
= nextIndent;
                                previousIndent = nextIndent--;
                            }
                            if ( buffer[i1]=='/' && buffer[i1+1]=='>' ) {
                                previousIndent = nextIndent--;
                            }
                            if ( thisIndent!=-1 ) {
                                if ( !atMargin ) tmpbuffer[i2++] = (byte)'
\n';
                                for ( i = tabWidth*thisIndent; i>0; i-- )
tmpbuffer[i2++] = (byte)' ';
                            }
                            tmpbuffer[i2++] = buffer[i1];
                            atMargin = ( buffer[i1]=='\n' );
                            /* ... end added by Edward Pring ***/
                        }
                        textArea.append( new String( tmpbuffer, 0, i2 ) );
                    }
                    else {
                        textArea.append( new String( buffer, 0, len ) );
                    }


Reply via email to