You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ga...@apache.org on 2004/11/22 19:11:13 UTC

cvs commit: ws-axis/java/src/org/apache/axis/transport/http ChunkedInputStream.java ChunkedOutputStream.java HTTPSender.java

gawor       2004/11/22 10:11:13

  Modified:    java/src/org/apache/axis/transport/http
                        ChunkedInputStream.java ChunkedOutputStream.java
                        HTTPSender.java
  Log:
  more small optimizations
  
  Revision  Changes    Path
  1.9       +34 -12    ws-axis/java/src/org/apache/axis/transport/http/ChunkedInputStream.java
  
  Index: ChunkedInputStream.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/ChunkedInputStream.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ChunkedInputStream.java	25 Feb 2004 14:02:45 -0000	1.8
  +++ ChunkedInputStream.java	22 Nov 2004 18:11:13 -0000	1.9
  @@ -38,12 +38,26 @@
           super(is);
       }
   
  -    public int read()
  +    public synchronized int read()
           throws IOException {
  -        byte[] d = new byte[1];
  -        int rc = read(d, 0, 1);
  -
  -        return rc > 0 ? (d[0] & 0xFF) : rc;
  +        if (closed) {
  +            return -1;
  +        }
  +        try {
  +            if (chunkSize < 1L) {
  +                if (0l == getChunked()) {
  +                    return -1;
  +                }
  +            }
  +            int rc = in.read();
  +            if (rc > 0) {
  +                chunkSize--;
  +            }
  +            return rc;
  +        } catch (IOException e) {
  +            closed = true;
  +            throw e;
  +        }
       }
   
       public int read(byte[] b)
  @@ -52,11 +66,13 @@
       }
   
       public synchronized int read(byte[] b,
  -        int off,
  -        int len)
  +                                 int off,
  +                                 int len)
           throws IOException {
  -        if (closed) return -1;
  -        int cs = (int) Math.min(Integer.MAX_VALUE, chunkSize);
  +        if (closed) {
  +            return -1;
  +        }
  +
           int totalread = 0;
           int bytesread = 0; 
   
  @@ -85,7 +101,9 @@
   
       public long skip(final long n)
           throws IOException {
  -        if (closed) return 0;
  +        if (closed) {
  +            return 0;
  +        }
           long skipped = 0l;
           byte[] b = new byte[1024];
           int bread = -1;
  @@ -100,7 +118,9 @@
   
       public int available()
           throws IOException {
  -        if (closed) return 0;
  +        if (closed) {
  +            return 0;
  +        }
           int rc = (int) Math.min(chunkSize, Integer.MAX_VALUE);
   
           return  Math.min(rc, in.available());
  @@ -151,7 +171,9 @@
       public void close() throws IOException {
      
           synchronized (this) {
  -            if (closed) return;
  +            if (closed) {
  +                return;
  +            }
               closed = true;
           }
   
  
  
  
  1.10      +5 -4      ws-axis/java/src/org/apache/axis/transport/http/ChunkedOutputStream.java
  
  Index: ChunkedOutputStream.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/ChunkedOutputStream.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ChunkedOutputStream.java	25 Feb 2004 14:02:45 -0000	1.9
  +++ ChunkedOutputStream.java	22 Nov 2004 18:11:13 -0000	1.10
  @@ -48,7 +48,8 @@
           write(b, 0, b.length);
       }
   
  -    static final byte[] crlf = "\r\n".getBytes();
  +    static final byte[] CRLF = "\r\n".getBytes();
  +    static final byte[] LAST_TOKEN = "0\r\n\r\n".getBytes();
   
       public void write(byte[] b,
           int off,
  @@ -57,9 +58,9 @@
           if (len == 0) return;
              
           out.write((Integer.toHexString(len)).getBytes());
  -        out.write(crlf);
  +        out.write(CRLF);
           out.write(b, off, len);
  -        out.write(crlf);
  +        out.write(CRLF);
       }
   
       /*
  @@ -74,7 +75,7 @@
               if (eos) return;
               eos = true;
           }
  -        out.write("0\r\n\r\n".getBytes());
  +        out.write(LAST_TOKEN);
           out.flush();
       }
   
  
  
  
  1.122     +78 -64    ws-axis/java/src/org/apache/axis/transport/http/HTTPSender.java
  
  Index: HTTPSender.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/HTTPSender.java,v
  retrieving revision 1.121
  retrieving revision 1.122
  diff -u -r1.121 -r1.122
  --- HTTPSender.java	15 Nov 2004 18:14:54 -0000	1.121
  +++ HTTPSender.java	22 Nov 2004 18:11:13 -0000	1.122
  @@ -57,6 +57,53 @@
   
       protected static Log log = LogFactory.getLog(HTTPSender.class.getName());
   
  +    private static final String ACCEPT_HEADERS = 
  +        HTTPConstants.HEADER_ACCEPT + //Limit to the types that are meaningful to us.
  +        ": " +
  +        HTTPConstants.HEADER_ACCEPT_APPL_SOAP +
  +        ", " +
  +        HTTPConstants.HEADER_ACCEPT_APPLICATION_DIME +
  +        ", " +
  +        HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED +
  +        ", " +
  +        HTTPConstants.HEADER_ACCEPT_TEXT_ALL +
  +        "\r\n" +
  +        HTTPConstants.HEADER_USER_AGENT +   //Tell who we are.
  +        ": " +
  +        Messages.getMessage("axisUserAgent") +
  +        "\r\n";
  +
  +    private static final String CACHE_HEADERS = 
  +        HTTPConstants.HEADER_CACHE_CONTROL +   //Stop caching proxies from caching SOAP reqeuest.
  +        ": " +
  +        HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE +
  +        "\r\n" +
  +        HTTPConstants.HEADER_PRAGMA +
  +        ": " +
  +        HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE +
  +        "\r\n";
  +
  +    private static final String CHUNKED_HEADER =
  +        HTTPConstants.HEADER_TRANSFER_ENCODING +
  +        ": " +
  +        HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED +
  +        "\r\n";
  +
  +    private static final String HEADER_CONTENT_TYPE_LC =
  +        HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase();
  +    
  +    private static final String HEADER_LOCATION_LC = 
  +        HTTPConstants.HEADER_LOCATION.toLowerCase();
  +    
  +    private static final String HEADER_CONTENT_LOCATION_LC = 
  +        HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase();
  +    
  +    private static final String HEADER_CONTENT_LENGTH_LC = 
  +        HTTPConstants.HEADER_CONTENT_LENGTH.toLowerCase();
  +    
  +    private static final String HEADER_TRANSFER_ENCODING_LC = 
  +        HTTPConstants.HEADER_TRANSFER_ENCODING.toLowerCase();
  +
       /**
        * the url; used for error reporting
        */
  @@ -284,11 +331,11 @@
           MimeHeaders mimeHeaders = reqMessage.getMimeHeaders();
   
           if (posting) {
  -        	String contentType;
  +                String contentType;
               if (mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE) != null) {
  -            	contentType = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE)[0];
  +                contentType = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_TYPE)[0];
               } else {
  -            	contentType = reqMessage.getContentType(msgContext.getSOAPConstants());
  +                contentType = reqMessage.getContentType(msgContext.getSOAPConstants());
               }
               header2.append(HTTPConstants.HEADER_CONTENT_TYPE)
                       .append(": ")
  @@ -296,33 +343,13 @@
                       .append("\r\n");
           }
   
  -        header2.append( HTTPConstants.HEADER_ACCEPT ) //Limit to the types that are meaningful to us.
  -                .append( ": ")
  -                .append( HTTPConstants.HEADER_ACCEPT_APPL_SOAP)
  -                .append( ", ")
  -                .append( HTTPConstants.HEADER_ACCEPT_APPLICATION_DIME)
  -                .append( ", ")
  -                .append( HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)
  -                .append( ", ")
  -                .append( HTTPConstants.HEADER_ACCEPT_TEXT_ALL)
  -                .append("\r\n")
  -                .append(HTTPConstants.HEADER_USER_AGENT)   //Tell who we are.
  -                .append( ": ")
  -                .append(Messages.getMessage("axisUserAgent"))
  -                .append("\r\n")
  +        header2.append(ACCEPT_HEADERS)
                   .append(HTTPConstants.HEADER_HOST)  //used for virtual connections
                   .append(": ")
                   .append(host)
                   .append((port == -1)?(""):(":" + port))
                   .append("\r\n")
  -                .append(HTTPConstants.HEADER_CACHE_CONTROL)   //Stop caching proxies from caching SOAP reqeuest.
  -                .append(": ")
  -                .append(HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE)
  -                .append("\r\n")
  -                .append(HTTPConstants.HEADER_PRAGMA)
  -                .append(": ")
  -                .append(HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE)
  -                .append("\r\n")
  +                .append(CACHE_HEADERS)
                   .append(HTTPConstants.HEADER_SOAP_ACTION)  //The SOAP action.
                   .append(": \"")
                   .append(action)
  @@ -337,10 +364,7 @@
                           .append("\r\n");
               } else {
                   //Do http chunking.
  -                header2.append(HTTPConstants.HEADER_TRANSFER_ENCODING)
  -                        .append(": ")
  -                        .append(HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)
  -                        .append("\r\n");
  +                header2.append(CHUNKED_HEADER);
               }
           }
   
  @@ -351,7 +375,7 @@
                   String headerName = mimeHeader.getName();
                   if (headerName.equals(HTTPConstants.HEADER_CONTENT_TYPE)
                           || headerName.equals(HTTPConstants.HEADER_SOAP_ACTION)) {
  -                	continue;
  +                        continue;
                   }
                   header2.append(mimeHeader.getName())
                   .append(": ")
  @@ -612,28 +636,24 @@
           }
   
           /* All HTTP headers have been read. */
  -    	String contentType =
  -                (String) headers
  -                .get(HTTPConstants.HEADER_CONTENT_TYPE.toLowerCase());
  +        String contentType = (String) headers.get(HEADER_CONTENT_TYPE_LC);
                           
  -    	contentType = (null == contentType)
  +        contentType = (null == contentType)
                   ? null
                   : contentType.trim();
                   
  -    	String location =
  -                (String) headers
  -                .get(HTTPConstants.HEADER_LOCATION.toLowerCase());
  +        String location = (String) headers.get(HEADER_LOCATION_LC);
   
  -    	location = (null == location)
  +        location = (null == location)
                   ? null
                   : location.trim();
                   
  -    	if ((returnCode > 199) && (returnCode < 300)) {
  -        	if (returnCode == 202)
  -            	return inp;
  +        if ((returnCode > 199) && (returnCode < 300)) {
  +                if (returnCode == 202)
  +                return inp;
               // SOAP return is OK - so fall through
           } else if (msgContext.getSOAPConstants() ==
  -            	SOAPConstants.SOAP12_CONSTANTS) {
  +                SOAPConstants.SOAP12_CONSTANTS) {
               // For now, if we're SOAP 1.2, fall through, since the range of
               // valid result codes is much greater
           } else if ((contentType != null) && !contentType.startsWith("text/html")
  @@ -642,14 +662,14 @@
           } else if ((location != null) && (returnCode == 307)) {
               // Temporary Redirect (HTTP: 307)            
               // close old connection
  -        	inp.close();
  -        	socketHolder.getSocket().close();    
  +                inp.close();
  +                socketHolder.getSocket().close();    
               // remove former result and set new target url
  -        	msgContext.removeProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
  -        	msgContext.setProperty(MessageContext.TRANS_URL, location);
  +                msgContext.removeProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
  +                msgContext.setProperty(MessageContext.TRANS_URL, location);
               // next try
  -        	invoke(msgContext);            
  -        	return inp;
  +                invoke(msgContext);            
  +                return inp;
           } else {
               // Unknown return code - so wrap up the content into a
               // SOAP Fault.
  @@ -670,36 +690,30 @@
               throw fault;
           }
   
  -        String contentLocation =
  -                (String) headers
  -                .get(HTTPConstants.HEADER_CONTENT_LOCATION.toLowerCase());
  +        String contentLocation = 
  +            (String) headers.get(HEADER_CONTENT_LOCATION_LC);
   
           contentLocation = (null == contentLocation)
                   ? null
                   : contentLocation.trim();
   
  -        String contentLength =
  -                (String) headers
  -                .get(HTTPConstants.HEADER_CONTENT_LENGTH.toLowerCase());
  +        String contentLength = 
  +            (String) headers.get(HEADER_CONTENT_LENGTH_LC);
   
           contentLength = (null == contentLength)
                   ? null
                   : contentLength.trim();
   
           String transferEncoding =
  -                (String) headers
  -                .get(HTTPConstants.HEADER_TRANSFER_ENCODING.toLowerCase());
  +            (String) headers.get(HEADER_TRANSFER_ENCODING_LC);
   
           if (null != transferEncoding) {
  -            transferEncoding = transferEncoding.toLowerCase();
  -        }
  -
  -        if (null != transferEncoding
  -                && transferEncoding.trim()
  -                .equals(HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)) {
  -            inp = new ChunkedInputStream(inp);
  +            transferEncoding = transferEncoding.trim().toLowerCase();
  +            if (transferEncoding.equals(
  +                   HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED)) {
  +                inp = new ChunkedInputStream(inp);
  +            }
           }
  -
   
           outMsg = new Message( new SocketInputStream(inp, socketHolder.getSocket()), false,
                                 contentType, contentLocation);