You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsrf-commits@ws.apache.org by sc...@apache.org on 2005/08/02 18:30:44 UTC

svn commit: r227033 [24/27] - in /webservices/wsrf/trunk: ./ src/java/org/apache/ws/ src/java/org/apache/ws/addressing/ src/java/org/apache/ws/addressing/v2003_03/ src/java/org/apache/ws/addressing/v2004_08_10/ src/java/org/apache/ws/resource/ src/java...

Modified: webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisWorker.java
URL: http://svn.apache.org/viewcvs/webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisWorker.java?rev=227033&r1=227032&r2=227033&view=diff
==============================================================================
--- webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisWorker.java (original)
+++ webservices/wsrf/trunk/src/java/org/apache/ws/util/test/axis/NotSoSimpleAxisWorker.java Tue Aug  2 09:28:49 2005
@@ -1,965 +1,964 @@
-/*=============================================================================*
- *  Copyright 2004 The Apache Software Foundation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *=============================================================================*/
-package org.apache.ws.util.test.axis;
-
-import org.apache.axis.AxisFault;
-import org.apache.axis.Constants;
-import org.apache.axis.Message;
-import org.apache.axis.MessageContext;
-import org.apache.axis.description.OperationDesc;
-import org.apache.axis.description.ServiceDesc;
-import org.apache.axis.encoding.Base64;
-import org.apache.axis.message.SOAPEnvelope;
-import org.apache.axis.message.SOAPFault;
-import org.apache.axis.server.AxisServer;
-import org.apache.axis.transport.http.HTTPConstants;
-import org.apache.axis.transport.http.NonBlockingBufferedInputStream;
-import org.apache.axis.transport.http.SimpleAxisServer;
-import org.apache.axis.transport.http.SimpleAxisWorker;
-import org.apache.axis.utils.Messages;
-import org.apache.axis.utils.XMLUtils;
-import org.apache.ws.util.IoUtils;
-import org.w3c.dom.Document;
-import javax.xml.namespace.QName;
-import javax.xml.soap.MimeHeader;
-import javax.xml.soap.MimeHeaders;
-import javax.xml.soap.SOAPMessage;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * Web server that supports SOAP POST requests and arbitrary GET requests.
- *
- * @author Ian P. Springer
- */
-public class NotSoSimpleAxisWorker
-   extends SimpleAxisWorker
-{
-   private static final byte[] TO_LOWER = new byte[256];
-
-   static
-   {
-      for ( int i = 0; i < 256; i++ )
-      {
-         TO_LOWER[i] = (byte) i;
-      }
-
-      for ( int lc = 'a'; lc <= 'z'; lc++ )
-      {
-         TO_LOWER[( lc + 'A' ) - 'a'] = (byte) lc;
-      }
-   }
-
-   // buffer for IO
-   private static final int BUFSIZ = 4096;
-
-   // Axis specific constants
-   private static String TRANSPORT_NAME = "SimpleHTTP";
-
-   // header ender
-   //private static final byte[] HEADER_ENDER = ": ".getBytes(  );
-
-   // HTTP status codes
-   private static byte[] OK        = ( "200 " + Messages.getMessage( "ok00" ) ).getBytes(  );
-   private static byte[] NOCONTENT = ( "202 " + Messages.getMessage( "ok00" ) + "\n\n" ).getBytes(  );
-   private static byte[] UNAUTH    = ( "401 " + Messages.getMessage( "unauth00" ) ).getBytes(  );
-   private static byte[] SENDER    = "400".getBytes(  );
-   private static byte[] ISE       = ( "500 " + Messages.getMessage( "internalError01" ) ).getBytes(  );
-
-   // HTTP prefix
-   private static byte[] HTTP = "HTTP/1.0 ".getBytes(  );
-
-   // Standard MIME headers for XML payload
-   private static byte[] XML_MIME_STUFF =
-      ( "\r\nContent-Type: text/xml; charset=utf-8\r\n" + "Content-Length: " ).getBytes(  );
-
-   // Standard MIME headers for HTML payload
-   private static byte[] HTML_MIME_STUFF =
-      ( "\r\nContent-Type: text/html; charset=utf-8\r\n" + "Content-Length: " ).getBytes(  );
-
-   // Mime/Content separator
-   private static byte[] SEPARATOR = "\r\n\r\n".getBytes(  );
-
-   // mime header for content length
-   private static final byte[] lenHeader = "content-length: ".getBytes(  );
-   private static final int    lenLen = lenHeader.length;
-
-   // mime header for content type
-   private static final byte[] typeHeader =
-      ( HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase(  ) + ": " ).getBytes(  );
-   private static final int    typeLen = typeHeader.length;
-
-   // mime header for content location
-   private static final byte[] locationHeader =
-      ( HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase(  ) + ": " ).getBytes(  );
-   private static final int    locationLen = locationHeader.length;
-
-   // mime header for soap action
-   private static final byte[] actionHeader = "soapaction: ".getBytes(  );
-   private static final int    actionLen = actionHeader.length;
-
-   // mime header for cookie
-   private static final byte[] cookieHeader = "cookie: ".getBytes(  );
-   private static final int    cookieLen = cookieHeader.length;
-
-   // mime header for cookie2
-   private static final byte[] cookie2Header = "cookie2: ".getBytes(  );
-   private static final int    cookie2Len = cookie2Header.length;
-
-   // HTTP header for authentication
-   private static final byte[] authHeader = "authorization: ".getBytes(  );
-   private static final int    authLen = authHeader.length;
-
-   // mime header for GET
-   private static final byte[] getHeader = "GET".getBytes(  );
-
-   // mime header for POST
-   private static final byte[] postHeader = "POST".getBytes(  );
-
-   // header ender
-   private static final byte[] headerEnder = ": ".getBytes(  );
-
-   // "Basic" auth string
-   private static final byte[]   basicAuth    = "basic ".getBytes(  );
-   private File                  m_docRootDir;
-   private NotSoSimpleAxisServer m_server;
-   private Socket                m_socket;
-
-   /**
-    * Creates a new {@link NotSoSimpleAxisWorker} object.
-    *
-    * @param server     DOCUMENT_ME
-    * @param socket     DOCUMENT_ME
-    * @param docRootDir DOCUMENT_ME
-    */
-   public NotSoSimpleAxisWorker( NotSoSimpleAxisServer server,
-                                 Socket                socket,
-                                 File                  docRootDir )
-   {
-      super( server, socket );
-      m_server        = server;
-      m_socket        = socket;
-      m_docRootDir    = docRootDir;
-   }
-
-   /**
-    * The main workhorse method.
-    */
-   public void execute(  )
-   {
-      byte[] buf = new byte[BUFSIZ];
-
-      // create an Axis server
-      AxisServer engine = m_server.getAxisServer(  );
-
-      // create and initialize a message context
-      MessageContext msgContext = new MessageContext( engine );
-      Message        requestMsg = null;
-
-      // Reusuable, buffered, content length controlled, InputStream
-      NonBlockingBufferedInputStream is = new NonBlockingBufferedInputStream(  );
-
-      // buffers for the headers we care about
-      StringBuffer soapAction      = new StringBuffer(  );
-      StringBuffer httpRequest     = new StringBuffer(  );
-      StringBuffer fileName        = new StringBuffer(  );
-      StringBuffer cookie          = new StringBuffer(  );
-      StringBuffer cookie2         = new StringBuffer(  );
-      StringBuffer authInfo        = new StringBuffer(  );
-      StringBuffer contentType     = new StringBuffer(  );
-      StringBuffer contentLocation = new StringBuffer(  );
-
-      Message      responseMsg = null;
-
-      // prepare request (do as much as possible while waiting for the
-      // next connection).  Note the next two statements are commented
-      // out.  Uncomment them if you experience any problems with not
-      // resetting state between requests:
-      //   msgContext = new MessageContext();
-      //   requestMsg = new Message("", "String");
-      //msgContext.setProperty("transport", "HTTPTransport");
-      msgContext.setTransportName( TRANSPORT_NAME );
-
-      responseMsg = null;
-
-      try
-      {
-         // assume the best
-         byte[] status = OK;
-
-         // assume we're not getting WSDL
-         boolean doWsdl = false;
-
-         // cookie for this session, if any
-         String cooky = null;
-
-         String methodName = null;
-
-         try
-         {
-            // wipe cookies if we're doing sessions
-            if ( m_server.isSessionUsed(  ) )
-            {
-               cookie.delete( 0,
-                              cookie.length(  ) );
-               cookie2.delete( 0,
-                               cookie2.length(  ) );
-            }
-
-            authInfo.delete( 0,
-                             authInfo.length(  ) );
-
-            // read headers
-            is.setInputStream( m_socket.getInputStream(  ) );
-
-            // parse all headers into hashtable
-            MimeHeaders requestHeaders = new MimeHeaders(  );
-            int         contentLength =
-               parseHeaders( is, buf, contentType, contentLocation, soapAction, httpRequest, fileName, cookie,
-                             cookie2, authInfo, requestHeaders );
-            is.setContentLength( contentLength );
-
-            int paramIdx = fileName.toString(  ).indexOf( '?' );
-            if ( paramIdx != -1 )
-            {
-               // Got params
-               String params = fileName.substring( paramIdx + 1 );
-               fileName.setLength( paramIdx );
-
-               log.debug( Messages.getMessage( "filename00",
-                                               fileName.toString(  ) ) );
-               log.debug( Messages.getMessage( "params00", params ) );
-
-               if ( "wsdl".equalsIgnoreCase( params ) )
-               {
-                  doWsdl = true;
-               }
-
-               if ( params.startsWith( "method=" ) )
-               {
-                  methodName = params.substring( 7 );
-               }
-            }
-
-            // Real and relative paths are the same for the
-            // SimpleAxisServer
-            msgContext.setProperty( Constants.MC_REALPATH,
-                                    fileName.toString(  ) );
-            msgContext.setProperty( Constants.MC_RELATIVE_PATH,
-                                    fileName.toString(  ) );
-            msgContext.setProperty( Constants.MC_JWS_CLASSDIR, "jwsClasses" );
-            msgContext.setProperty( Constants.MC_HOME_DIR, "." );
-
-            // !!! Fix string concatenation
-            String url =
-               "http://" + getLocalHost(  ) + ":" + m_server.getServerSocket(  ).getLocalPort(  ) + "/"
-               + fileName.toString(  );
-            msgContext.setProperty( MessageContext.TRANS_URL, url );
-
-            String filePart = fileName.toString(  );
-            if ( filePart.startsWith( "axis/services/" ) )
-            {
-               String servicePart = filePart.substring( 14 );
-               int    separator = servicePart.indexOf( '/' );
-               if ( separator > -1 )
-               {
-                  msgContext.setProperty( "objectID",
-                                          servicePart.substring( separator + 1 ) );
-                  servicePart = servicePart.substring( 0, separator );
-               }
-
-               msgContext.setTargetService( servicePart );
-            }
-
-            if ( authInfo.length(  ) > 0 )
-            {
-               // Process authentication info
-               //authInfo = new StringBuffer("dXNlcjE6cGFzczE=");
-               byte[]       decoded = Base64.decode( authInfo.toString(  ) );
-               StringBuffer userBuf = new StringBuffer(  );
-               StringBuffer pwBuf   = new StringBuffer(  );
-               StringBuffer authBuf = userBuf;
-               for ( int i = 0; i < decoded.length; i++ )
-               {
-                  if ( (char) ( decoded[i] & 0x7f ) == ':' )
-                  {
-                     authBuf = pwBuf;
-                     continue;
-                  }
-
-                  authBuf.append( (char) ( decoded[i] & 0x7f ) );
-               }
-
-               if ( log.isDebugEnabled(  ) )
-               {
-                  log.debug( Messages.getMessage( "user00",
-                                                  userBuf.toString(  ) ) );
-               }
-
-               msgContext.setUsername( userBuf.toString(  ) );
-               msgContext.setPassword( pwBuf.toString(  ) );
-            }
-
-            // if get, then return simpleton document as response
-            if ( httpRequest.toString(  ).equals( "GET" ) )
-            {
-               OutputStream out = m_socket.getOutputStream(  );
-               out.write( HTTP );
-               if ( fileName.length(  ) == 0 )
-               {
-                  out.write( "301 Redirect\nLocation: /axis/\n\n".getBytes(  ) );
-                  out.flush(  );
-                  return;
-               }
-
-               out.write( status );
-
-               if ( methodName != null )
-               {
-                  String body = "<" + methodName + ">" + 
-                     //                               args +
-                     "</" + methodName + ">";
-                  String msgtxt =
-                     "<SOAP-ENV:Envelope" + " xmlns:SOAP-ENV=\"" + Constants.URI_SOAP12_ENV + "\">"
-                     + "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" + "</SOAP-ENV:Envelope>";
-
-                  ByteArrayInputStream istream = new ByteArrayInputStream( msgtxt.getBytes(  ) );
-                  requestMsg = new Message( istream );
-               }
-               else if ( doWsdl )
-               {
-                  engine.generateWSDL( msgContext );
-
-                  Document doc = (Document) msgContext.getProperty( "WSDL" );
-                  if ( doc != null )
-                  {
-                     XMLUtils.normalize( doc.getDocumentElement(  ) );
-                     String response  = XMLUtils.PrettyDocumentToString( doc );
-                     byte[] respBytes = response.getBytes(  );
-
-                     out.write( XML_MIME_STUFF );
-                     putInt( buf, out, respBytes.length );
-                     out.write( SEPARATOR );
-                     out.write( respBytes );
-                     out.flush(  );
-                     return;
-                  }
-               }
-               else if ( fileName.equals( "/" ) )
-               {
-                  StringBuffer sb = new StringBuffer(  );
-                  sb.append( "<h2>And now... Some Services</h2>\n" );
-                  Iterator i = engine.getConfig(  ).getDeployedServices(  );
-                  sb.append( "<ul>\n" );
-                  while ( i.hasNext(  ) )
-                  {
-                     ServiceDesc sd = (ServiceDesc) i.next(  );
-                     sb.append( "<li>\n" );
-                     sb.append( sd.getName(  ) );
-                     sb.append( " <a href=\"services/" );
-                     sb.append( sd.getName(  ) );
-                     sb.append( "?wsdl\"><i>(wsdl)</i></a></li>\n" );
-                     ArrayList operations = sd.getOperations(  );
-                     if ( !operations.isEmpty(  ) )
-                     {
-                        sb.append( "<ul>\n" );
-                        for ( Iterator it = operations.iterator(  ); it.hasNext(  ); )
-                        {
-                           OperationDesc desc = (OperationDesc) it.next(  );
-                           sb.append( "<li>" + desc.getName(  ) );
-                        }
-
-                        sb.append( "</ul>\n" );
-                     }
-                  }
-
-                  sb.append( "</ul>\n" );
-
-                  byte[] bytes = sb.toString(  ).getBytes(  );
-
-                  out.write( HTML_MIME_STUFF );
-                  putInt( buf, out, bytes.length );
-                  out.write( SEPARATOR );
-                  out.write( bytes );
-                  out.flush(  );
-                  return;
-               }
-               else
-               {
-                  String filePath = fileName.toString(  );
-                  if ( filePath.startsWith( "/" ) )
-                  {
-                     filePath = filePath.substring( 1 );
-                  }
-
-                  File        realPath = new File( m_docRootDir, filePath );
-                  InputStream in = new BufferedInputStream( new FileInputStream( realPath ) );
-
-                  //System.out.println( "Serving up " + realPath + " on a silver platter..." );
-                  IoUtils.copy( in, out );
-                  in.close(  );
-                  out.flush(  );
-                  return;
-               }
-            }
-            else
-            {
-               // this may be "" if either SOAPAction: "" or if no SOAPAction at all.
-               // for now, do not complain if no SOAPAction at all
-               String soapActionString = soapAction.toString(  );
-               if ( soapActionString != null )
-               {
-                  msgContext.setUseSOAPAction( true );
-                  msgContext.setSOAPActionURI( soapActionString );
-               }
-
-               requestMsg = new Message( is,
-                                         false,
-                                         contentType.toString(  ),
-                                         contentLocation.toString(  ) );
-            }
-
-            // Transfer HTTP headers to MIME headers for request message.
-            MimeHeaders requestMimeHeaders = requestMsg.getMimeHeaders(  );
-            for ( Iterator i = requestHeaders.getAllHeaders(  ); i.hasNext(  ); )
-            {
-               MimeHeader requestHeader = (MimeHeader) i.next(  );
-               requestMimeHeaders.addHeader( requestHeader.getName(  ),
-                                             requestHeader.getValue(  ) );
-            }
-
-            msgContext.setRequestMessage( requestMsg );
-
-            // put character encoding of request to message context
-            // in order to reuse it during the whole process.
-            String requestEncoding = (String) requestMsg.getProperty( SOAPMessage.CHARACTER_SET_ENCODING );
-            if ( requestEncoding != null )
-            {
-               msgContext.setProperty( SOAPMessage.CHARACTER_SET_ENCODING, requestEncoding );
-            }
-
-            // set up session, if any
-            if ( m_server.isSessionUsed(  ) )
-            {
-               // did we get a cookie?
-               if ( cookie.length(  ) > 0 )
-               {
-                  cooky = cookie.toString(  ).trim(  );
-               }
-               else if ( cookie2.length(  ) > 0 )
-               {
-                  cooky = cookie2.toString(  ).trim(  );
-               }
-
-               // if cooky is null, cook up a cooky
-               if ( cooky == null )
-               {
-                  // fake one up!
-                  // make it be an arbitrarily increasing number
-                  // (no this is not thread safe because ++ isn't atomic)
-                  int i = SimpleAxisServer.sessionIndex++;
-                  cooky = "" + i;
-               }
-
-               msgContext.setSession( m_server.createSession( cooky ) );
-            }
-
-            // invoke the Axis engine
-            engine.invoke( msgContext );
-
-            // Retrieve the response from Axis
-            responseMsg = msgContext.getResponseMessage(  );
-
-            if ( responseMsg == null )
-            {
-               status = NOCONTENT;
-            }
-         }
-         catch ( Exception e )
-         {
-            AxisFault af;
-            if ( e instanceof AxisFault )
-            {
-               af = (AxisFault) e;
-               log.debug( Messages.getMessage( "serverFault00" ),
-                          af );
-               QName faultCode = af.getFaultCode(  );
-               if ( Constants.FAULT_SOAP12_SENDER.equals( faultCode ) )
-               {
-                  status = SENDER;
-               }
-               else if ( "Server.Unauthorized".equals( af.getFaultCode(  ).getLocalPart(  ) ) )
-               {
-                  status = UNAUTH; // SC_UNAUTHORIZED
-               }
-               else
-               {
-                  status = ISE; // SC_INTERNAL_SERVER_ERROR
-               }
-            }
-            else
-            {
-               status    = ISE; // SC_INTERNAL_SERVER_ERROR
-               af        = AxisFault.makeFault( e );
-            }
-
-            // There may be headers we want to preserve in the
-            // response message - so if it's there, just add the
-            // FaultElement to it.  Otherwise, make a new one.
-            responseMsg = msgContext.getResponseMessage(  );
-            if ( responseMsg == null )
-            {
-               responseMsg = new Message( af );
-               responseMsg.setMessageContext( msgContext );
-            }
-            else
-            {
-               try
-               {
-                  SOAPEnvelope env = responseMsg.getSOAPEnvelope(  );
-                  env.clearBody(  );
-                  env.addBodyElement( new SOAPFault( (AxisFault) e ) );
-               }
-               catch ( AxisFault fault )
-               {
-                  // Should never reach here!
-               }
-            }
-         }
-
-         // synchronize the character encoding of request and response
-         String responseEncoding = (String) msgContext.getProperty( SOAPMessage.CHARACTER_SET_ENCODING );
-         if ( ( responseEncoding != null ) && ( responseMsg != null ) )
-         {
-            responseMsg.setProperty( SOAPMessage.CHARACTER_SET_ENCODING, responseEncoding );
-         }
-
-         // Send it on its way...
-         OutputStream out = m_socket.getOutputStream(  );
-         out.write( HTTP );
-         out.write( status );
-
-         if ( responseMsg != null )
-         {
-            if ( m_server.isSessionUsed(  ) && ( null != cooky ) && ( 0 != cooky.trim(  ).length(  ) ) )
-            {
-               // write cookie headers, if any
-               // don't sweat efficiency *too* badly
-               // optimize at will
-               StringBuffer cookieOut = new StringBuffer(  );
-               cookieOut.append( "\r\nSet-Cookie: " ).append( cooky ).append( "\r\nSet-Cookie2: " ).append( cooky );
-
-               // OH, THE HUMILITY!  yes this is inefficient.
-               out.write( cookieOut.toString(  ).getBytes(  ) );
-            }
-
-            //out.write(XML_MIME_STUFF);
-            out.write( ( "\r\n" + HTTPConstants.HEADER_CONTENT_TYPE + ": "
-                       + responseMsg.getContentType( msgContext.getSOAPConstants(  ) ) ).getBytes(  ) );
-
-            // Writing the length causes the entire message to be decoded twice.
-            //out.write(("\r\n" + HTTPConstants.HEADER_CONTENT_LENGTH + ": " + responseMsg.getContentLength()).getBytes());
-            // putInt(out, response.length);
-            // Transfer MIME headers to HTTP headers for response message.
-            for ( Iterator i = responseMsg.getMimeHeaders(  ).getAllHeaders(  ); i.hasNext(  ); )
-            {
-               MimeHeader responseHeader = (MimeHeader) i.next(  );
-               out.write( '\r' );
-               out.write( '\n' );
-               out.write( responseHeader.getName(  ).getBytes(  ) );
-               out.write( headerEnder );
-               out.write( responseHeader.getValue(  ).getBytes(  ) );
-            }
-
-            out.write( SEPARATOR );
-            responseMsg.writeTo( out );
-         }
-
-         // out.write(response);
-         out.flush(  );
-      }
-      catch ( Exception e )
-      {
-         log.info( Messages.getMessage( "exception00" ),
-                   e );
-      }
-      finally
-      {
-         try
-         {
-            if ( m_socket != null )
-            {
-               m_socket.close(  );
-            }
-         }
-         catch ( Exception e )
-         {
-         }
-      }
-
-      if ( msgContext.getProperty( MessageContext.QUIT_REQUESTED ) != null )
-      {
-         // why then, quit!
-         try
-         {
-            m_server.stop(  );
-         }
-         catch ( Exception e )
-         {
-         }
-      }
-   }
-
-   /**
-    * Read all mime headers, returning the value of Content-Length and SOAPAction.
-    *
-    * @param is              InputStream to read from
-    * @param contentType     The content type.
-    * @param contentLocation The content location
-    * @param soapAction      StringBuffer to return the soapAction into
-    * @param httpRequest     StringBuffer for GET / POST
-    * @param cookie          first cookie header (if doSessions)
-    * @param cookie2         second cookie header (if doSessions)
-    * @param headers         HTTP headers to transfer to MIME headers
-    *
-    * @return Content-Length
-    */
-   private int parseHeaders( NonBlockingBufferedInputStream is,
-                             byte[]                         buf,
-                             StringBuffer                   contentType,
-                             StringBuffer                   contentLocation,
-                             StringBuffer                   soapAction,
-                             StringBuffer                   httpRequest,
-                             StringBuffer                   fileName,
-                             StringBuffer                   cookie,
-                             StringBuffer                   cookie2,
-                             StringBuffer                   authInfo,
-                             MimeHeaders                    headers )
-   throws java.io.IOException
-   {
-      int n;
-      int len = 0;
-
-      // parse first line as GET or POST
-      n = this.readLine( is, buf, 0, buf.length );
-
-      if ( n < 0 )
-      {
-         // nothing!
-         throw new java.io.IOException( Messages.getMessage( "unexpectedEOS00" ) );
-      }
-
-      // which does it begin with?
-      httpRequest.delete( 0,
-                          httpRequest.length(  ) );
-      fileName.delete( 0,
-                       fileName.length(  ) );
-      contentType.delete( 0,
-                          contentType.length(  ) );
-      contentLocation.delete( 0,
-                              contentLocation.length(  ) );
-
-      if ( buf[0] == getHeader[0] )
-      {
-         httpRequest.append( "GET" );
-
-         for ( int i = 0; i < ( n - 5 ); i++ )
-         {
-            char c = (char) ( buf[i + 5] & 0x7f );
-
-            if ( c == ' ' )
-            {
-               break;
-            }
-
-            fileName.append( c );
-         }
-
-         log.debug( Messages.getMessage( "filename01",
-                                         "SimpleAxisServer",
-                                         fileName.toString(  ) ) );
-
-         return 0;
-      }
-      else if ( buf[0] == postHeader[0] )
-      {
-         httpRequest.append( "POST" );
-
-         for ( int i = 0; i < ( n - 6 ); i++ )
-         {
-            char c = (char) ( buf[i + 6] & 0x7f );
-
-            if ( c == ' ' )
-            {
-               break;
-            }
-
-            fileName.append( c );
-         }
-
-         log.debug( Messages.getMessage( "filename01",
-                                         "SimpleAxisServer",
-                                         fileName.toString(  ) ) );
-      }
-      else
-      {
-         throw new java.io.IOException( Messages.getMessage( "badRequest00" ) );
-      }
-
-      while ( ( n = readLine( is, buf, 0, buf.length ) ) > 0 )
-      {
-         if ( ( n <= 2 ) && ( ( buf[0] == '\n' ) || ( buf[0] == '\r' ) ) && ( len > 0 ) )
-         {
-            break;
-         }
-
-         // RobJ gutted the previous logic; it was too hard to extend for more headers.
-         // Now, all it does is search forwards for ": " in the buf,
-         // then do a length / byte compare.
-         // Hopefully this is still somewhat efficient (Sam is watching!).
-         // First, search forwards for ": "
-         int endHeaderIndex = 0;
-
-         while ( ( endHeaderIndex < n ) && ( TO_LOWER[buf[endHeaderIndex]] != headerEnder[0] ) )
-         {
-            endHeaderIndex++;
-         }
-
-         endHeaderIndex += 2;
-
-         // endHeaderIndex now points _just past_ the ": ", and is
-         // comparable to the various lenLen, actionLen, etc. values
-         // convenience; i gets pre-incremented, so initialize it to one less
-         int i = endHeaderIndex - 1;
-
-         // which header did we find?
-         if ( ( endHeaderIndex == lenLen ) && matches( buf, lenHeader ) )
-         {
-            // parse content length
-            while ( ( ++i < n ) && ( buf[i] >= '0' ) && ( buf[i] <= '9' ) )
-            {
-               len = ( len * 10 ) + ( buf[i] - '0' );
-            }
-
-            headers.addHeader( HTTPConstants.HEADER_CONTENT_LENGTH,
-                               String.valueOf( len ) );
-         }
-         else if ( ( endHeaderIndex == actionLen ) && matches( buf, actionHeader ) )
-         {
-            soapAction.delete( 0,
-                               soapAction.length(  ) );
-
-            // skip initial '"'
-            i++;
-
-            while ( ( ++i < n ) && ( buf[i] != '"' ) )
-            {
-               soapAction.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( HTTPConstants.HEADER_SOAP_ACTION, "\"" + soapAction.toString(  ) + "\"" );
-         }
-         else if ( m_server.isSessionUsed(  ) && ( endHeaderIndex == cookieLen ) && matches( buf, cookieHeader ) )
-         {
-            // keep everything up to first ;
-            while ( ( ++i < n ) && ( buf[i] != ';' ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-            {
-               cookie.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( "Set-Cookie",
-                               cookie.toString(  ) );
-         }
-         else if ( m_server.isSessionUsed(  ) && ( endHeaderIndex == cookie2Len ) && matches( buf, cookie2Header ) )
-         {
-            // keep everything up to first ;
-            while ( ( ++i < n ) && ( buf[i] != ';' ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-            {
-               cookie2.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( "Set-Cookie2",
-                               cookie.toString(  ) );
-         }
-         else if ( ( endHeaderIndex == authLen ) && matches( buf, authHeader ) )
-         {
-            if ( matches( buf, endHeaderIndex, basicAuth ) )
-            {
-               i += basicAuth.length;
-
-               while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-               {
-                  if ( buf[i] == ' ' )
-                  {
-                     continue;
-                  }
-
-                  authInfo.append( (char) ( buf[i] & 0x7f ) );
-               }
-
-               headers.addHeader( HTTPConstants.HEADER_AUTHORIZATION,
-                                  new String( basicAuth ) + authInfo.toString(  ) );
-            }
-            else
-            {
-               throw new java.io.IOException( Messages.getMessage( "badAuth00" ) );
-            }
-         }
-         else if ( ( endHeaderIndex == locationLen ) && matches( buf, locationHeader ) )
-         {
-            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-            {
-               if ( buf[i] == ' ' )
-               {
-                  continue;
-               }
-
-               contentLocation.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( HTTPConstants.HEADER_CONTENT_LOCATION,
-                               contentLocation.toString(  ) );
-         }
-         else if ( ( endHeaderIndex == typeLen ) && matches( buf, typeHeader ) )
-         {
-            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-            {
-               if ( buf[i] == ' ' )
-               {
-                  continue;
-               }
-
-               contentType.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( HTTPConstants.HEADER_CONTENT_TYPE,
-                               contentLocation.toString(  ) );
-         }
-         else
-         {
-            String       customHeaderName  = new String( buf, 0, endHeaderIndex - 2 );
-            StringBuffer customHeaderValue = new StringBuffer(  );
-
-            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
-            {
-               if ( buf[i] == ' ' )
-               {
-                  continue;
-               }
-
-               customHeaderValue.append( (char) ( buf[i] & 0x7f ) );
-            }
-
-            headers.addHeader( customHeaderName,
-                               customHeaderValue.toString(  ) );
-         }
-      }
-
-      return len;
-   }
-
-   /**
-    * output an integer into the output stream
-    *
-    * @param out   OutputStream to be written to
-    * @param value Integer value to be written.
-    */
-   private void putInt( byte[]       buf,
-                        OutputStream out,
-                        int          value )
-   throws java.io.IOException
-   {
-      int len    = 0;
-      int offset = buf.length;
-
-      // negative numbers
-      if ( value < 0 )
-      {
-         buf[--offset]    = (byte) '-';
-         value            = -value;
-         len++;
-      }
-
-      // zero
-      if ( value == 0 )
-      {
-         buf[--offset] = (byte) '0';
-         len++;
-      }
-
-      // positive numbers
-      while ( value > 0 )
-      {
-         buf[--offset]    = (byte) ( ( value % 10 ) + '0' );
-         value            = value / 10;
-         len++;
-      }
-
-      // write the result
-      out.write( buf, offset, len );
-   }
-
-   /**
-    * Read a single line from the input stream
-    *
-    * @param is  inputstream to read from
-    * @param b   byte array to read into
-    * @param off starting offset into the byte array
-    * @param len maximum number of bytes to read
-    */
-   private int readLine( NonBlockingBufferedInputStream is,
-                         byte[]                         b,
-                         int                            off,
-                         int                            len )
-   throws java.io.IOException
-   {
-      int count = 0;
-      int c;
-
-      while ( ( c = is.read(  ) ) != -1 )
-      {
-         if ( ( c != '\n' ) && ( c != '\r' ) )
-         {
-            b[off++] = (byte) c;
-            count++;
-         }
-
-         if ( count == len )
-         {
-            break;
-         }
-
-         if ( '\n' == c )
-         {
-            int peek = is.peek(  ); //If the next line begins with tab or space then this is a continuation.
-
-            if ( ( peek != ' ' ) && ( peek != '\t' ) )
-            {
-               break;
-            }
-         }
-      }
-
-      return ( count > 0 ) ? count : ( -1 );
-   }
+/*=============================================================================*
+ *  Copyright 2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *=============================================================================*/
+package org.apache.ws.util.test.axis;
+
+import org.apache.axis.AxisFault;
+import org.apache.axis.Constants;
+import org.apache.axis.Message;
+import org.apache.axis.MessageContext;
+import org.apache.axis.description.OperationDesc;
+import org.apache.axis.description.ServiceDesc;
+import org.apache.axis.encoding.Base64;
+import org.apache.axis.message.SOAPEnvelope;
+import org.apache.axis.message.SOAPFault;
+import org.apache.axis.server.AxisServer;
+import org.apache.axis.transport.http.HTTPConstants;
+import org.apache.axis.transport.http.NonBlockingBufferedInputStream;
+import org.apache.axis.transport.http.SimpleAxisServer;
+import org.apache.axis.transport.http.SimpleAxisWorker;
+import org.apache.axis.utils.Messages;
+import org.apache.axis.utils.XMLUtils;
+import org.apache.ws.util.IoUtils;
+import org.w3c.dom.Document;
+import javax.xml.namespace.QName;
+import javax.xml.soap.MimeHeader;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPMessage;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Web server that supports SOAP POST requests and arbitrary GET requests.
+ *
+ * @author Ian P. Springer
+ */
+public class NotSoSimpleAxisWorker
+   extends SimpleAxisWorker
+{
+   private static final byte[] TO_LOWER = new byte[256];
+
+   static
+   {
+      for ( int i = 0; i < 256; i++ )
+      {
+         TO_LOWER[i] = (byte) i;
+      }
+
+      for ( int lc = 'a'; lc <= 'z'; lc++ )
+      {
+         TO_LOWER[( lc + 'A' ) - 'a'] = (byte) lc;
+      }
+   }
+
+   // buffer for IO
+   private static final int BUFSIZ = 4096;
+
+   // Axis specific constants
+   private static String TRANSPORT_NAME = "SimpleHTTP";
+
+   // header ender
+   //private static final byte[] HEADER_ENDER = ": ".getBytes(  );
+   // HTTP status codes
+   private static byte[] OK        = ( "200 " + Messages.getMessage( "ok00" ) ).getBytes(  );
+   private static byte[] NOCONTENT = ( "202 " + Messages.getMessage( "ok00" ) + "\n\n" ).getBytes(  );
+   private static byte[] UNAUTH    = ( "401 " + Messages.getMessage( "unauth00" ) ).getBytes(  );
+   private static byte[] SENDER    = "400".getBytes(  );
+   private static byte[] ISE       = ( "500 " + Messages.getMessage( "internalError01" ) ).getBytes(  );
+
+   // HTTP prefix
+   private static byte[] HTTP = "HTTP/1.0 ".getBytes(  );
+
+   // Standard MIME headers for XML payload
+   private static byte[] XML_MIME_STUFF =
+      ( "\r\nContent-Type: text/xml; charset=utf-8\r\n" + "Content-Length: " ).getBytes(  );
+
+   // Standard MIME headers for HTML payload
+   private static byte[] HTML_MIME_STUFF =
+      ( "\r\nContent-Type: text/html; charset=utf-8\r\n" + "Content-Length: " ).getBytes(  );
+
+   // Mime/Content separator
+   private static byte[] SEPARATOR = "\r\n\r\n".getBytes(  );
+
+   // mime header for content length
+   private static final byte[] lenHeader = "content-length: ".getBytes(  );
+   private static final int    lenLen = lenHeader.length;
+
+   // mime header for content type
+   private static final byte[] typeHeader =
+      ( HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase(  ) + ": " ).getBytes(  );
+   private static final int    typeLen = typeHeader.length;
+
+   // mime header for content location
+   private static final byte[] locationHeader =
+      ( HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase(  ) + ": " ).getBytes(  );
+   private static final int    locationLen = locationHeader.length;
+
+   // mime header for soap action
+   private static final byte[] actionHeader = "soapaction: ".getBytes(  );
+   private static final int    actionLen = actionHeader.length;
+
+   // mime header for cookie
+   private static final byte[] cookieHeader = "cookie: ".getBytes(  );
+   private static final int    cookieLen = cookieHeader.length;
+
+   // mime header for cookie2
+   private static final byte[] cookie2Header = "cookie2: ".getBytes(  );
+   private static final int    cookie2Len = cookie2Header.length;
+
+   // HTTP header for authentication
+   private static final byte[] authHeader = "authorization: ".getBytes(  );
+   private static final int    authLen = authHeader.length;
+
+   // mime header for GET
+   private static final byte[] getHeader = "GET".getBytes(  );
+
+   // mime header for POST
+   private static final byte[] postHeader = "POST".getBytes(  );
+
+   // header ender
+   private static final byte[] headerEnder = ": ".getBytes(  );
+
+   // "Basic" auth string
+   private static final byte[]   basicAuth    = "basic ".getBytes(  );
+   private File                  m_docRootDir;
+   private NotSoSimpleAxisServer m_server;
+   private Socket                m_socket;
+
+   /**
+    * Creates a new {@link NotSoSimpleAxisWorker} object.
+    *
+    * @param server     DOCUMENT_ME
+    * @param socket     DOCUMENT_ME
+    * @param docRootDir DOCUMENT_ME
+    */
+   public NotSoSimpleAxisWorker( NotSoSimpleAxisServer server,
+                                 Socket                socket,
+                                 File                  docRootDir )
+   {
+      super( server, socket );
+      m_server        = server;
+      m_socket        = socket;
+      m_docRootDir    = docRootDir;
+   }
+
+   /**
+    * The main workhorse method.
+    */
+   public void execute(  )
+   {
+      byte[] buf = new byte[BUFSIZ];
+
+      // create an Axis server
+      AxisServer engine = m_server.getAxisServer(  );
+
+      // create and initialize a message context
+      MessageContext msgContext = new MessageContext( engine );
+      Message        requestMsg = null;
+
+      // Reusuable, buffered, content length controlled, InputStream
+      NonBlockingBufferedInputStream is = new NonBlockingBufferedInputStream(  );
+
+      // buffers for the headers we care about
+      StringBuffer soapAction      = new StringBuffer(  );
+      StringBuffer httpRequest     = new StringBuffer(  );
+      StringBuffer fileName        = new StringBuffer(  );
+      StringBuffer cookie          = new StringBuffer(  );
+      StringBuffer cookie2         = new StringBuffer(  );
+      StringBuffer authInfo        = new StringBuffer(  );
+      StringBuffer contentType     = new StringBuffer(  );
+      StringBuffer contentLocation = new StringBuffer(  );
+
+      Message      responseMsg = null;
+
+      // prepare request (do as much as possible while waiting for the
+      // next connection).  Note the next two statements are commented
+      // out.  Uncomment them if you experience any problems with not
+      // resetting state between requests:
+      //   msgContext = new MessageContext();
+      //   requestMsg = new Message("", "String");
+      //msgContext.setProperty("transport", "HTTPTransport");
+      msgContext.setTransportName( TRANSPORT_NAME );
+
+      responseMsg = null;
+
+      try
+      {
+         // assume the best
+         byte[] status = OK;
+
+         // assume we're not getting WSDL
+         boolean doWsdl = false;
+
+         // cookie for this session, if any
+         String cooky = null;
+
+         String methodName = null;
+
+         try
+         {
+            // wipe cookies if we're doing sessions
+            if ( m_server.isSessionUsed(  ) )
+            {
+               cookie.delete( 0,
+                              cookie.length(  ) );
+               cookie2.delete( 0,
+                               cookie2.length(  ) );
+            }
+
+            authInfo.delete( 0,
+                             authInfo.length(  ) );
+
+            // read headers
+            is.setInputStream( m_socket.getInputStream(  ) );
+
+            // parse all headers into hashtable
+            MimeHeaders requestHeaders = new MimeHeaders(  );
+            int         contentLength =
+               parseHeaders( is, buf, contentType, contentLocation, soapAction, httpRequest, fileName, cookie,
+                             cookie2, authInfo, requestHeaders );
+            is.setContentLength( contentLength );
+
+            int paramIdx = fileName.toString(  ).indexOf( '?' );
+            if ( paramIdx != -1 )
+            {
+               // Got params
+               String params = fileName.substring( paramIdx + 1 );
+               fileName.setLength( paramIdx );
+
+               log.debug( Messages.getMessage( "filename00",
+                                               fileName.toString(  ) ) );
+               log.debug( Messages.getMessage( "params00", params ) );
+
+               if ( "wsdl".equalsIgnoreCase( params ) )
+               {
+                  doWsdl = true;
+               }
+
+               if ( params.startsWith( "method=" ) )
+               {
+                  methodName = params.substring( 7 );
+               }
+            }
+
+            // Real and relative paths are the same for the
+            // SimpleAxisServer
+            msgContext.setProperty( Constants.MC_REALPATH,
+                                    fileName.toString(  ) );
+            msgContext.setProperty( Constants.MC_RELATIVE_PATH,
+                                    fileName.toString(  ) );
+            msgContext.setProperty( Constants.MC_JWS_CLASSDIR, "jwsClasses" );
+            msgContext.setProperty( Constants.MC_HOME_DIR, "." );
+
+            // !!! Fix string concatenation
+            String url =
+               "http://" + getLocalHost(  ) + ":" + m_server.getServerSocket(  ).getLocalPort(  ) + "/"
+               + fileName.toString(  );
+            msgContext.setProperty( MessageContext.TRANS_URL, url );
+
+            String filePart = fileName.toString(  );
+            if ( filePart.startsWith( "axis/services/" ) )
+            {
+               String servicePart = filePart.substring( 14 );
+               int    separator = servicePart.indexOf( '/' );
+               if ( separator > -1 )
+               {
+                  msgContext.setProperty( "objectID",
+                                          servicePart.substring( separator + 1 ) );
+                  servicePart = servicePart.substring( 0, separator );
+               }
+
+               msgContext.setTargetService( servicePart );
+            }
+
+            if ( authInfo.length(  ) > 0 )
+            {
+               // Process authentication info
+               //authInfo = new StringBuffer("dXNlcjE6cGFzczE=");
+               byte[]       decoded = Base64.decode( authInfo.toString(  ) );
+               StringBuffer userBuf = new StringBuffer(  );
+               StringBuffer pwBuf   = new StringBuffer(  );
+               StringBuffer authBuf = userBuf;
+               for ( int i = 0; i < decoded.length; i++ )
+               {
+                  if ( (char) ( decoded[i] & 0x7f ) == ':' )
+                  {
+                     authBuf = pwBuf;
+                     continue;
+                  }
+
+                  authBuf.append( (char) ( decoded[i] & 0x7f ) );
+               }
+
+               if ( log.isDebugEnabled(  ) )
+               {
+                  log.debug( Messages.getMessage( "user00",
+                                                  userBuf.toString(  ) ) );
+               }
+
+               msgContext.setUsername( userBuf.toString(  ) );
+               msgContext.setPassword( pwBuf.toString(  ) );
+            }
+
+            // if get, then return simpleton document as response
+            if ( httpRequest.toString(  ).equals( "GET" ) )
+            {
+               OutputStream out = m_socket.getOutputStream(  );
+               out.write( HTTP );
+               if ( fileName.length(  ) == 0 )
+               {
+                  out.write( "301 Redirect\nLocation: /axis/\n\n".getBytes(  ) );
+                  out.flush(  );
+                  return;
+               }
+
+               out.write( status );
+
+               if ( methodName != null )
+               {
+                  String body = "<" + methodName + ">" + 
+                     //                               args +
+                     "</" + methodName + ">";
+                  String msgtxt =
+                     "<SOAP-ENV:Envelope" + " xmlns:SOAP-ENV=\"" + Constants.URI_SOAP12_ENV + "\">"
+                     + "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" + "</SOAP-ENV:Envelope>";
+
+                  ByteArrayInputStream istream = new ByteArrayInputStream( msgtxt.getBytes(  ) );
+                  requestMsg = new Message( istream );
+               }
+               else if ( doWsdl )
+               {
+                  engine.generateWSDL( msgContext );
+
+                  Document doc = (Document) msgContext.getProperty( "WSDL" );
+                  if ( doc != null )
+                  {
+                     XMLUtils.normalize( doc.getDocumentElement(  ) );
+                     String response  = XMLUtils.PrettyDocumentToString( doc );
+                     byte[] respBytes = response.getBytes(  );
+
+                     out.write( XML_MIME_STUFF );
+                     putInt( buf, out, respBytes.length );
+                     out.write( SEPARATOR );
+                     out.write( respBytes );
+                     out.flush(  );
+                     return;
+                  }
+               }
+               else if ( fileName.equals( "/" ) )
+               {
+                  StringBuffer sb = new StringBuffer(  );
+                  sb.append( "<h2>And now... Some Services</h2>\n" );
+                  Iterator i = engine.getConfig(  ).getDeployedServices(  );
+                  sb.append( "<ul>\n" );
+                  while ( i.hasNext(  ) )
+                  {
+                     ServiceDesc sd = (ServiceDesc) i.next(  );
+                     sb.append( "<li>\n" );
+                     sb.append( sd.getName(  ) );
+                     sb.append( " <a href=\"services/" );
+                     sb.append( sd.getName(  ) );
+                     sb.append( "?wsdl\"><i>(wsdl)</i></a></li>\n" );
+                     ArrayList operations = sd.getOperations(  );
+                     if ( !operations.isEmpty(  ) )
+                     {
+                        sb.append( "<ul>\n" );
+                        for ( Iterator it = operations.iterator(  ); it.hasNext(  ); )
+                        {
+                           OperationDesc desc = (OperationDesc) it.next(  );
+                           sb.append( "<li>" + desc.getName(  ) );
+                        }
+
+                        sb.append( "</ul>\n" );
+                     }
+                  }
+
+                  sb.append( "</ul>\n" );
+
+                  byte[] bytes = sb.toString(  ).getBytes(  );
+
+                  out.write( HTML_MIME_STUFF );
+                  putInt( buf, out, bytes.length );
+                  out.write( SEPARATOR );
+                  out.write( bytes );
+                  out.flush(  );
+                  return;
+               }
+               else
+               {
+                  String filePath = fileName.toString(  );
+                  if ( filePath.startsWith( "/" ) )
+                  {
+                     filePath = filePath.substring( 1 );
+                  }
+
+                  File        realPath = new File( m_docRootDir, filePath );
+                  InputStream in = new BufferedInputStream( new FileInputStream( realPath ) );
+
+                  //System.out.println( "Serving up " + realPath + " on a silver platter..." );
+                  IoUtils.copy( in, out );
+                  in.close(  );
+                  out.flush(  );
+                  return;
+               }
+            }
+            else
+            {
+               // this may be "" if either SOAPAction: "" or if no SOAPAction at all.
+               // for now, do not complain if no SOAPAction at all
+               String soapActionString = soapAction.toString(  );
+               if ( soapActionString != null )
+               {
+                  msgContext.setUseSOAPAction( true );
+                  msgContext.setSOAPActionURI( soapActionString );
+               }
+
+               requestMsg = new Message( is,
+                                         false,
+                                         contentType.toString(  ),
+                                         contentLocation.toString(  ) );
+            }
+
+            // Transfer HTTP headers to MIME headers for request message.
+            MimeHeaders requestMimeHeaders = requestMsg.getMimeHeaders(  );
+            for ( Iterator i = requestHeaders.getAllHeaders(  ); i.hasNext(  ); )
+            {
+               MimeHeader requestHeader = (MimeHeader) i.next(  );
+               requestMimeHeaders.addHeader( requestHeader.getName(  ),
+                                             requestHeader.getValue(  ) );
+            }
+
+            msgContext.setRequestMessage( requestMsg );
+
+            // put character encoding of request to message context
+            // in order to reuse it during the whole process.
+            String requestEncoding = (String) requestMsg.getProperty( SOAPMessage.CHARACTER_SET_ENCODING );
+            if ( requestEncoding != null )
+            {
+               msgContext.setProperty( SOAPMessage.CHARACTER_SET_ENCODING, requestEncoding );
+            }
+
+            // set up session, if any
+            if ( m_server.isSessionUsed(  ) )
+            {
+               // did we get a cookie?
+               if ( cookie.length(  ) > 0 )
+               {
+                  cooky = cookie.toString(  ).trim(  );
+               }
+               else if ( cookie2.length(  ) > 0 )
+               {
+                  cooky = cookie2.toString(  ).trim(  );
+               }
+
+               // if cooky is null, cook up a cooky
+               if ( cooky == null )
+               {
+                  // fake one up!
+                  // make it be an arbitrarily increasing number
+                  // (no this is not thread safe because ++ isn't atomic)
+                  int i = SimpleAxisServer.sessionIndex++;
+                  cooky = "" + i;
+               }
+
+               msgContext.setSession( m_server.createSession( cooky ) );
+            }
+
+            // invoke the Axis engine
+            engine.invoke( msgContext );
+
+            // Retrieve the response from Axis
+            responseMsg = msgContext.getResponseMessage(  );
+
+            if ( responseMsg == null )
+            {
+               status = NOCONTENT;
+            }
+         }
+         catch ( Exception e )
+         {
+            AxisFault af;
+            if ( e instanceof AxisFault )
+            {
+               af = (AxisFault) e;
+               log.debug( Messages.getMessage( "serverFault00" ),
+                          af );
+               QName faultCode = af.getFaultCode(  );
+               if ( Constants.FAULT_SOAP12_SENDER.equals( faultCode ) )
+               {
+                  status = SENDER;
+               }
+               else if ( "Server.Unauthorized".equals( af.getFaultCode(  ).getLocalPart(  ) ) )
+               {
+                  status = UNAUTH; // SC_UNAUTHORIZED
+               }
+               else
+               {
+                  status = ISE; // SC_INTERNAL_SERVER_ERROR
+               }
+            }
+            else
+            {
+               status    = ISE; // SC_INTERNAL_SERVER_ERROR
+               af        = AxisFault.makeFault( e );
+            }
+
+            // There may be headers we want to preserve in the
+            // response message - so if it's there, just add the
+            // FaultElement to it.  Otherwise, make a new one.
+            responseMsg = msgContext.getResponseMessage(  );
+            if ( responseMsg == null )
+            {
+               responseMsg = new Message( af );
+               responseMsg.setMessageContext( msgContext );
+            }
+            else
+            {
+               try
+               {
+                  SOAPEnvelope env = responseMsg.getSOAPEnvelope(  );
+                  env.clearBody(  );
+                  env.addBodyElement( new SOAPFault( (AxisFault) e ) );
+               }
+               catch ( AxisFault fault )
+               {
+                  // Should never reach here!
+               }
+            }
+         }
+
+         // synchronize the character encoding of request and response
+         String responseEncoding = (String) msgContext.getProperty( SOAPMessage.CHARACTER_SET_ENCODING );
+         if ( ( responseEncoding != null ) && ( responseMsg != null ) )
+         {
+            responseMsg.setProperty( SOAPMessage.CHARACTER_SET_ENCODING, responseEncoding );
+         }
+
+         // Send it on its way...
+         OutputStream out = m_socket.getOutputStream(  );
+         out.write( HTTP );
+         out.write( status );
+
+         if ( responseMsg != null )
+         {
+            if ( m_server.isSessionUsed(  ) && ( null != cooky ) && ( 0 != cooky.trim(  ).length(  ) ) )
+            {
+               // write cookie headers, if any
+               // don't sweat efficiency *too* badly
+               // optimize at will
+               StringBuffer cookieOut = new StringBuffer(  );
+               cookieOut.append( "\r\nSet-Cookie: " ).append( cooky ).append( "\r\nSet-Cookie2: " ).append( cooky );
+
+               // OH, THE HUMILITY!  yes this is inefficient.
+               out.write( cookieOut.toString(  ).getBytes(  ) );
+            }
+
+            //out.write(XML_MIME_STUFF);
+            out.write( ( "\r\n" + HTTPConstants.HEADER_CONTENT_TYPE + ": "
+                       + responseMsg.getContentType( msgContext.getSOAPConstants(  ) ) ).getBytes(  ) );
+
+            // Writing the length causes the entire message to be decoded twice.
+            //out.write(("\r\n" + HTTPConstants.HEADER_CONTENT_LENGTH + ": " + responseMsg.getContentLength()).getBytes());
+            // putInt(out, response.length);
+            // Transfer MIME headers to HTTP headers for response message.
+            for ( Iterator i = responseMsg.getMimeHeaders(  ).getAllHeaders(  ); i.hasNext(  ); )
+            {
+               MimeHeader responseHeader = (MimeHeader) i.next(  );
+               out.write( '\r' );
+               out.write( '\n' );
+               out.write( responseHeader.getName(  ).getBytes(  ) );
+               out.write( headerEnder );
+               out.write( responseHeader.getValue(  ).getBytes(  ) );
+            }
+
+            out.write( SEPARATOR );
+            responseMsg.writeTo( out );
+         }
+
+         // out.write(response);
+         out.flush(  );
+      }
+      catch ( Exception e )
+      {
+         log.info( Messages.getMessage( "exception00" ),
+                   e );
+      }
+      finally
+      {
+         try
+         {
+            if ( m_socket != null )
+            {
+               m_socket.close(  );
+            }
+         }
+         catch ( Exception e )
+         {
+         }
+      }
+
+      if ( msgContext.getProperty( MessageContext.QUIT_REQUESTED ) != null )
+      {
+         // why then, quit!
+         try
+         {
+            m_server.stop(  );
+         }
+         catch ( Exception e )
+         {
+         }
+      }
+   }
+
+   /**
+    * Read all mime headers, returning the value of Content-Length and SOAPAction.
+    *
+    * @param is              InputStream to read from
+    * @param contentType     The content type.
+    * @param contentLocation The content location
+    * @param soapAction      StringBuffer to return the soapAction into
+    * @param httpRequest     StringBuffer for GET / POST
+    * @param cookie          first cookie header (if doSessions)
+    * @param cookie2         second cookie header (if doSessions)
+    * @param headers         HTTP headers to transfer to MIME headers
+    *
+    * @return Content-Length
+    */
+   private int parseHeaders( NonBlockingBufferedInputStream is,
+                             byte[]                         buf,
+                             StringBuffer                   contentType,
+                             StringBuffer                   contentLocation,
+                             StringBuffer                   soapAction,
+                             StringBuffer                   httpRequest,
+                             StringBuffer                   fileName,
+                             StringBuffer                   cookie,
+                             StringBuffer                   cookie2,
+                             StringBuffer                   authInfo,
+                             MimeHeaders                    headers )
+   throws java.io.IOException
+   {
+      int n;
+      int len = 0;
+
+      // parse first line as GET or POST
+      n = this.readLine( is, buf, 0, buf.length );
+
+      if ( n < 0 )
+      {
+         // nothing!
+         throw new java.io.IOException( Messages.getMessage( "unexpectedEOS00" ) );
+      }
+
+      // which does it begin with?
+      httpRequest.delete( 0,
+                          httpRequest.length(  ) );
+      fileName.delete( 0,
+                       fileName.length(  ) );
+      contentType.delete( 0,
+                          contentType.length(  ) );
+      contentLocation.delete( 0,
+                              contentLocation.length(  ) );
+
+      if ( buf[0] == getHeader[0] )
+      {
+         httpRequest.append( "GET" );
+
+         for ( int i = 0; i < ( n - 5 ); i++ )
+         {
+            char c = (char) ( buf[i + 5] & 0x7f );
+
+            if ( c == ' ' )
+            {
+               break;
+            }
+
+            fileName.append( c );
+         }
+
+         log.debug( Messages.getMessage( "filename01",
+                                         "SimpleAxisServer",
+                                         fileName.toString(  ) ) );
+
+         return 0;
+      }
+      else if ( buf[0] == postHeader[0] )
+      {
+         httpRequest.append( "POST" );
+
+         for ( int i = 0; i < ( n - 6 ); i++ )
+         {
+            char c = (char) ( buf[i + 6] & 0x7f );
+
+            if ( c == ' ' )
+            {
+               break;
+            }
+
+            fileName.append( c );
+         }
+
+         log.debug( Messages.getMessage( "filename01",
+                                         "SimpleAxisServer",
+                                         fileName.toString(  ) ) );
+      }
+      else
+      {
+         throw new java.io.IOException( Messages.getMessage( "badRequest00" ) );
+      }
+
+      while ( ( n = readLine( is, buf, 0, buf.length ) ) > 0 )
+      {
+         if ( ( n <= 2 ) && ( ( buf[0] == '\n' ) || ( buf[0] == '\r' ) ) && ( len > 0 ) )
+         {
+            break;
+         }
+
+         // RobJ gutted the previous logic; it was too hard to extend for more headers.
+         // Now, all it does is search forwards for ": " in the buf,
+         // then do a length / byte compare.
+         // Hopefully this is still somewhat efficient (Sam is watching!).
+         // First, search forwards for ": "
+         int endHeaderIndex = 0;
+
+         while ( ( endHeaderIndex < n ) && ( TO_LOWER[buf[endHeaderIndex]] != headerEnder[0] ) )
+         {
+            endHeaderIndex++;
+         }
+
+         endHeaderIndex += 2;
+
+         // endHeaderIndex now points _just past_ the ": ", and is
+         // comparable to the various lenLen, actionLen, etc. values
+         // convenience; i gets pre-incremented, so initialize it to one less
+         int i = endHeaderIndex - 1;
+
+         // which header did we find?
+         if ( ( endHeaderIndex == lenLen ) && matches( buf, lenHeader ) )
+         {
+            // parse content length
+            while ( ( ++i < n ) && ( buf[i] >= '0' ) && ( buf[i] <= '9' ) )
+            {
+               len = ( len * 10 ) + ( buf[i] - '0' );
+            }
+
+            headers.addHeader( HTTPConstants.HEADER_CONTENT_LENGTH,
+                               String.valueOf( len ) );
+         }
+         else if ( ( endHeaderIndex == actionLen ) && matches( buf, actionHeader ) )
+         {
+            soapAction.delete( 0,
+                               soapAction.length(  ) );
+
+            // skip initial '"'
+            i++;
+
+            while ( ( ++i < n ) && ( buf[i] != '"' ) )
+            {
+               soapAction.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( HTTPConstants.HEADER_SOAP_ACTION, "\"" + soapAction.toString(  ) + "\"" );
+         }
+         else if ( m_server.isSessionUsed(  ) && ( endHeaderIndex == cookieLen ) && matches( buf, cookieHeader ) )
+         {
+            // keep everything up to first ;
+            while ( ( ++i < n ) && ( buf[i] != ';' ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+            {
+               cookie.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( "Set-Cookie",
+                               cookie.toString(  ) );
+         }
+         else if ( m_server.isSessionUsed(  ) && ( endHeaderIndex == cookie2Len ) && matches( buf, cookie2Header ) )
+         {
+            // keep everything up to first ;
+            while ( ( ++i < n ) && ( buf[i] != ';' ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+            {
+               cookie2.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( "Set-Cookie2",
+                               cookie.toString(  ) );
+         }
+         else if ( ( endHeaderIndex == authLen ) && matches( buf, authHeader ) )
+         {
+            if ( matches( buf, endHeaderIndex, basicAuth ) )
+            {
+               i += basicAuth.length;
+
+               while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+               {
+                  if ( buf[i] == ' ' )
+                  {
+                     continue;
+                  }
+
+                  authInfo.append( (char) ( buf[i] & 0x7f ) );
+               }
+
+               headers.addHeader( HTTPConstants.HEADER_AUTHORIZATION,
+                                  new String( basicAuth ) + authInfo.toString(  ) );
+            }
+            else
+            {
+               throw new java.io.IOException( Messages.getMessage( "badAuth00" ) );
+            }
+         }
+         else if ( ( endHeaderIndex == locationLen ) && matches( buf, locationHeader ) )
+         {
+            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+            {
+               if ( buf[i] == ' ' )
+               {
+                  continue;
+               }
+
+               contentLocation.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( HTTPConstants.HEADER_CONTENT_LOCATION,
+                               contentLocation.toString(  ) );
+         }
+         else if ( ( endHeaderIndex == typeLen ) && matches( buf, typeHeader ) )
+         {
+            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+            {
+               if ( buf[i] == ' ' )
+               {
+                  continue;
+               }
+
+               contentType.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( HTTPConstants.HEADER_CONTENT_TYPE,
+                               contentLocation.toString(  ) );
+         }
+         else
+         {
+            String       customHeaderName  = new String( buf, 0, endHeaderIndex - 2 );
+            StringBuffer customHeaderValue = new StringBuffer(  );
+
+            while ( ( ++i < n ) && ( buf[i] != '\r' ) && ( buf[i] != '\n' ) )
+            {
+               if ( buf[i] == ' ' )
+               {
+                  continue;
+               }
+
+               customHeaderValue.append( (char) ( buf[i] & 0x7f ) );
+            }
+
+            headers.addHeader( customHeaderName,
+                               customHeaderValue.toString(  ) );
+         }
+      }
+
+      return len;
+   }
+
+   /**
+    * output an integer into the output stream
+    *
+    * @param out   OutputStream to be written to
+    * @param value Integer value to be written.
+    */
+   private void putInt( byte[]       buf,
+                        OutputStream out,
+                        int          value )
+   throws java.io.IOException
+   {
+      int len    = 0;
+      int offset = buf.length;
+
+      // negative numbers
+      if ( value < 0 )
+      {
+         buf[--offset]    = (byte) '-';
+         value            = -value;
+         len++;
+      }
+
+      // zero
+      if ( value == 0 )
+      {
+         buf[--offset] = (byte) '0';
+         len++;
+      }
+
+      // positive numbers
+      while ( value > 0 )
+      {
+         buf[--offset]    = (byte) ( ( value % 10 ) + '0' );
+         value            = value / 10;
+         len++;
+      }
+
+      // write the result
+      out.write( buf, offset, len );
+   }
+
+   /**
+    * Read a single line from the input stream
+    *
+    * @param is  inputstream to read from
+    * @param b   byte array to read into
+    * @param off starting offset into the byte array
+    * @param len maximum number of bytes to read
+    */
+   private int readLine( NonBlockingBufferedInputStream is,
+                         byte[]                         b,
+                         int                            off,
+                         int                            len )
+   throws java.io.IOException
+   {
+      int count = 0;
+      int c;
+
+      while ( ( c = is.read(  ) ) != -1 )
+      {
+         if ( ( c != '\n' ) && ( c != '\r' ) )
+         {
+            b[off++] = (byte) c;
+            count++;
+         }
+
+         if ( count == len )
+         {
+            break;
+         }
+
+         if ( '\n' == c )
+         {
+            int peek = is.peek(  ); //If the next line begins with tab or space then this is a continuation.
+
+            if ( ( peek != ' ' ) && ( peek != '\t' ) )
+            {
+               break;
+            }
+         }
+      }
+
+      return ( count > 0 ) ? count : ( -1 );
+   }
 }

Modified: webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerImpl.java
URL: http://svn.apache.org/viewcvs/webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerImpl.java?rev=227033&r1=227032&r2=227033&view=diff
==============================================================================
--- webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerImpl.java (original)
+++ webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerImpl.java Tue Aug  2 09:28:49 2005
@@ -33,11 +33,11 @@
 public class TimerImpl
    implements Timer
 {
-   private static final Log LOG = LogFactory.getLog( TimerImpl.class );
-   private static final Messages MSG = MessagesImpl.getInstance();
-   private TimerTaskImpl m_timerTask;
-   private TimerListener m_listener;
-   private long          m_period;
+   private static final Log      LOG         = LogFactory.getLog( TimerImpl.class );
+   private static final Messages MSG         = MessagesImpl.getInstance(  );
+   private TimerTaskImpl         m_timerTask;
+   private TimerListener         m_listener;
+   private long                  m_period;
 
    /**
     * Creates a new {@link TimerImpl} object.
@@ -86,11 +86,12 @@
     */
    public boolean cancel(  )
    {
-      LOG.debug(MSG.getMessage( Keys.CANCELLING));
+      LOG.debug( MSG.getMessage( Keys.CANCELLING ) );
       if ( this.m_listener instanceof CancelTimerListener )
       {
          ( (CancelTimerListener) this.m_listener ).timerCancel( this );
       }
+
       return m_timerTask.cancel(  );
    }
 

Modified: webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerManagerImpl.java
URL: http://svn.apache.org/viewcvs/webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerManagerImpl.java?rev=227033&r1=227032&r2=227033&view=diff
==============================================================================
--- webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerManagerImpl.java (original)
+++ webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerManagerImpl.java Tue Aug  2 09:28:49 2005
@@ -24,7 +24,6 @@
 import org.apache.ws.util.i18n.Keys;
 import org.apache.ws.util.i18n.Messages;
 import org.apache.ws.util.i18n.MessagesImpl;
-
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
@@ -41,12 +40,12 @@
 public class TimerManagerImpl
    implements TimerManager
 {
-   private static final Log LOG = LogFactory.getLog( TimerManagerImpl.class );
-   private static final Messages MSG = MessagesImpl.getInstance();
-   private int  m_poolSize     = 1;
-   private List m_taskList     = new LinkedList(  );
-   private List m_timerPool    = new ArrayList(  );
-   private int  m_currentTimer = 0;
+   private static final Log      LOG            = LogFactory.getLog( TimerManagerImpl.class );
+   private static final Messages MSG            = MessagesImpl.getInstance(  );
+   private int                   m_poolSize     = 1;
+   private List                  m_taskList     = new LinkedList(  );
+   private List                  m_timerPool    = new ArrayList(  );
+   private int                   m_currentTimer = 0;
 
    /**
     * Creates a new {@link TimerManagerImpl} object.
@@ -66,12 +65,15 @@
     */
    public void setPoolSize( int poolSize )
    {
-      LOG.debug(MSG.getMessage( Keys.SET_POOL_SIZE, Integer.toString(poolSize)));
+      LOG.debug( MSG.getMessage( Keys.SET_POOL_SIZE,
+                                 Integer.toString( poolSize ) ) );
+
       // don't allow shrinking of the pool
       for ( int i = this.m_poolSize; i < poolSize; i++ )
       {
          m_timerPool.add( new java.util.Timer( true ) );
       }
+
       this.m_poolSize = poolSize;
    }
 
@@ -130,7 +132,7 @@
     */
    public synchronized void resume(  )
    {
-      LOG.debug(MSG.getMessage( Keys.RESUMING));
+      LOG.debug( MSG.getMessage( Keys.RESUMING ) );
       Iterator taskIterator = this.m_taskList.iterator(  );
       while ( taskIterator.hasNext(  ) )
       {
@@ -153,7 +155,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, period );
+      Timer         newTimer = new TimerImpl( listener, period );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.schedule( task, firstTime, period );
@@ -173,7 +175,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, 0 );
+      Timer         newTimer = new TimerImpl( listener, 0 );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.schedule( task, time );
@@ -195,7 +197,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, period );
+      Timer         newTimer = new TimerImpl( listener, period );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.schedule( task, delay, period );
@@ -215,7 +217,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, 0 );
+      Timer         newTimer = new TimerImpl( listener, 0 );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.schedule( task, delay );
@@ -237,7 +239,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, period );
+      Timer         newTimer = new TimerImpl( listener, period );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.scheduleAtFixedRate( task, firstTime, period );
@@ -259,7 +261,7 @@
    {
       java.util.Timer timer = (java.util.Timer) m_timerPool.get( this.m_currentTimer );
       this.m_currentTimer = ( this.m_currentTimer + 1 ) % this.m_poolSize;
-      Timer                newTimer = new TimerImpl( listener, period );
+      Timer         newTimer = new TimerImpl( listener, period );
       TimerTaskImpl task = new TimerTaskImpl( newTimer, this );
       this.m_taskList.add( task );
       timer.scheduleAtFixedRate( task, delay, period );
@@ -271,7 +273,7 @@
     */
    public synchronized void stop(  )
    {
-      LOG.debug(MSG.getMessage( Keys.STOPPING));
+      LOG.debug( MSG.getMessage( Keys.STOPPING ) );
       Iterator taskIterator = this.m_taskList.iterator(  );
       while ( taskIterator.hasNext(  ) )
       {
@@ -283,6 +285,7 @@
             ( (StopTimerListener) listener ).timerStop( task.getTimer(  ) );
          }
       }
+
       this.m_taskList.clear(  );
    }
 
@@ -291,7 +294,7 @@
     */
    public synchronized void suspend(  )
    {
-      LOG.debug(MSG.getMessage( Keys.SUSPENDING));
+      LOG.debug( MSG.getMessage( Keys.SUSPENDING ) );
       Iterator taskIterator = this.m_taskList.iterator(  );
       while ( taskIterator.hasNext(  ) )
       {
@@ -342,8 +345,8 @@
     */
    protected synchronized void removeTask( Object task )
    {
-      LOG.debug(MSG.getMessage( Keys.REMOVING_TASK,task.toString()));
+      LOG.debug( MSG.getMessage( Keys.REMOVING_TASK,
+                                 task.toString(  ) ) );
       this.m_taskList.remove( task );
    }
-
-}
+}
\ No newline at end of file

Modified: webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerTaskImpl.java
URL: http://svn.apache.org/viewcvs/webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerTaskImpl.java?rev=227033&r1=227032&r2=227033&view=diff
==============================================================================
--- webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerTaskImpl.java (original)
+++ webservices/wsrf/trunk/src/java/org/apache/ws/util/timer/TimerTaskImpl.java Tue Aug  2 09:28:49 2005
@@ -17,7 +17,6 @@
 
 import commonj.timers.Timer;
 import commonj.timers.TimerListener;
-
 import java.util.TimerTask;
 
 /**
@@ -27,13 +26,13 @@
  * NOTE: Previously named TimerListenerWrapper.
  */
 public class TimerTaskImpl
-      extends TimerTask
+   extends TimerTask
 {
-   private Timer m_timer;
-   private TimerListener m_timerListener;
+   private Timer            m_timer;
+   private TimerListener    m_timerListener;
    private TimerManagerImpl m_timerManager;
-   private boolean m_suspended;
-   private boolean m_expired;
+   private boolean          m_suspended;
+   private boolean          m_expired;
 
    /**
     * DOCUMENT_ME
@@ -41,16 +40,17 @@
     * @param timer
     * @param timerManager
     */
-   public TimerTaskImpl( Timer timer,
-                                TimerManagerImpl timerManager )
+   public TimerTaskImpl( Timer            timer,
+                         TimerManagerImpl timerManager )
    {
       m_timer = timer;
       if ( timer instanceof TimerImpl )
       {
          ( (TimerImpl) timer ).setTimerTask( this );
       }
-      m_timerListener = timer.getTimerListener();
-      m_timerManager = timerManager;
+
+      m_timerListener    = timer.getTimerListener(  );
+      m_timerManager     = timerManager;
    }
 
    /**
@@ -58,21 +58,21 @@
     *
     * @return DOCUMENT_ME
     */
-   public boolean cancel()
+   public boolean cancel(  )
    {
       m_timerManager.removeTask( this );
-      return super.cancel();
+      return super.cancel(  );
    }
 
    /**
     * DOCUMENT_ME
     */
-   public synchronized void resume()
+   public synchronized void resume(  )
    {
       m_suspended = false;
       if ( m_expired )
       {
-         executeTimerExpiredAction();
+         executeTimerExpiredAction(  );
          m_expired = false;
       }
    }
@@ -80,11 +80,11 @@
    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
-   public synchronized void run()
+   public synchronized void run(  )
    {
       if ( !m_suspended )
       {
-         executeTimerExpiredAction();
+         executeTimerExpiredAction(  );
       }
       else
       {
@@ -92,19 +92,10 @@
       }
    }
 
-   private void executeTimerExpiredAction()
-   {
-      m_timerListener.timerExpired( m_timer );
-      if ( m_timer.getPeriod() == 0 )
-      {
-         m_timerManager.removeTask( this );
-      }
-   }
-
    /**
     * DOCUMENT_ME
     */
-   public synchronized void suspend()
+   public synchronized void suspend(  )
    {
       m_suspended = true;
    }
@@ -112,7 +103,7 @@
    /**
     * @return Returns the listener.
     */
-   protected TimerListener getListener()
+   protected TimerListener getListener(  )
    {
       return m_timerListener;
    }
@@ -120,7 +111,7 @@
    /**
     * @return Returns the timer.
     */
-   protected Timer getTimer()
+   protected Timer getTimer(  )
    {
       return m_timer;
    }
@@ -130,8 +121,17 @@
     *
     * @return DOCUMENT_ME
     */
-   protected boolean stop()
+   protected boolean stop(  )
+   {
+      return super.cancel(  );
+   }
+
+   private void executeTimerExpiredAction(  )
    {
-      return super.cancel();
+      m_timerListener.timerExpired( m_timer );
+      if ( m_timer.getPeriod(  ) == 0 )
+      {
+         m_timerManager.removeTask( this );
+      }
    }
 }