You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mb...@apache.org on 2003/07/15 14:40:57 UTC

cvs commit: jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods EntityEnclosingMethod.java MultipartPostMethod.java

mbecke      2003/07/15 05:40:57

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        HttpMethodBase.java ContentLengthInputStream.java
               httpclient/src/java/org/apache/commons/httpclient/methods
                        EntityEnclosingMethod.java MultipartPostMethod.java
  Log:
  Adds support for large(long) content.
  
  PR: 21323
  Submitted by: Michael Becke
  Reviewed by: Oleg Kalnichevski
  
  Revision  Changes    Path
  1.167     +9 -9      jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
  
  Index: HttpMethodBase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
  retrieving revision 1.166
  retrieving revision 1.167
  diff -u -r1.166 -r1.167
  --- HttpMethodBase.java	15 Jul 2003 02:19:58 -0000	1.166
  +++ HttpMethodBase.java	15 Jul 2003 12:40:56 -0000	1.167
  @@ -668,7 +668,7 @@
        *          If <tt>Content-Length</tt> header is not present, the method 
        *          returns  <tt>-1</tt>.
        */
  -    protected int getResponseContentLength() {
  +    protected long getResponseContentLength() {
           Header[] headers = getResponseHeaderGroup().getHeaders("Content-Length");
           if (headers.length == 0) {
               return -1;
  @@ -679,7 +679,7 @@
           for (int i = headers.length - 1; i >= 0; i++) {
               Header header = headers[i];
               try {
  -                return Integer.parseInt(header.getValue());
  +                return Long.parseLong(header.getValue());
               } catch (NumberFormatException e) {
                   if (LOG.isWarnEnabled()) {
                       LOG.warn("Invalid content-length value: " + e.getMessage());
  @@ -1362,7 +1362,7 @@
        *
        * @return <tt>0</tt>, indicating that the request has no body.
        */
  -    protected int getRequestContentLength() {
  +    protected long getRequestContentLength() {
           return 0;
       }
   
  @@ -1424,7 +1424,7 @@
                     + "HttpState, HttpConnection)");
   
           // add content length or chunking
  -        int len = getRequestContentLength();
  +        long len = getRequestContentLength();
           if (getRequestHeader("content-length") == null) {
               if (0 < len) {
                   setRequestHeader("Content-Length", String.valueOf(len));
  @@ -2081,7 +2081,7 @@
                   result = is;  
               }
           } else {
  -            int expectedLength = getResponseContentLength();
  +            long expectedLength = getResponseContentLength();
               if (expectedLength == -1) {
                   if (canResponseHaveBody(statusLine.getStatusCode())) {
                       setConnectionCloseForced(true);
  
  
  
  1.7       +21 -7     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ContentLengthInputStream.java
  
  Index: ContentLengthInputStream.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ContentLengthInputStream.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ContentLengthInputStream.java	28 Jan 2003 04:40:20 -0000	1.6
  +++ ContentLengthInputStream.java	15 Jul 2003 12:40:56 -0000	1.7
  @@ -70,7 +70,7 @@
   /**
    * Cuts the wrapped InputStream off after a specified number of bytes.
    *
  - * @author Ortwin Gl�ck
  + * @author Ortwin Gl�ck
    * @author Eric Johnson
    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
    * @since 2.0
  @@ -82,15 +82,17 @@
        * The maximum number of bytes that can be read from the stream. Subsequent
        * read operations will return -1.
        */
  -    private int contentLength;
  +    private long contentLength;
   
       /** The current position */
  -    private int pos = 0;
  +    private long pos = 0;
   
       /** True if the stream is closed. */
       private boolean closed = false;
   
       /**
  +     * @deprecated use {@link #ContentLengthInputStream(InputStream, long)}
  +     * 
        * Creates a new length limited stream
        *
        * @param in The stream to wrap
  @@ -103,6 +105,18 @@
       }
   
       /**
  +     * Creates a new length limited stream
  +     *
  +     * @param in The stream to wrap
  +     * @param contentLength The maximum number of bytes that can be read from
  +     * the stream. Subsequent read operations will return -1.
  +     */
  +    public ContentLengthInputStream(InputStream in, long contentLength) {
  +        super(in);
  +        this.contentLength = contentLength;
  +    }
  +
  +    /**
        * <p>Reads until the end of the known length of content.</p>
        *
        * <p>Does not close the underlying socket input, but instead leaves it
  @@ -162,7 +176,7 @@
           }
   
           if (pos + len > contentLength) {
  -            len = contentLength - pos;
  +            len = (int) (contentLength - pos);
           }
           int count = super.read(b, off, len);
           pos += count;
  
  
  
  1.22      +35 -8     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java
  
  Index: EntityEnclosingMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- EntityEnclosingMethod.java	15 Jul 2003 02:19:58 -0000	1.21
  +++ EntityEnclosingMethod.java	15 Jul 2003 12:40:57 -0000	1.22
  @@ -128,7 +128,7 @@
       /** The content length of the <code>requestBodyStream</code> or one of
        *  <code>CONTENT_LENGTH_AUTO</code> and <code>CONTENT_LENGTH_CHUNKED</code>.
        */
  -    private int requestContentLength = CONTENT_LENGTH_AUTO;
  +    private long requestContentLength = CONTENT_LENGTH_AUTO;
   
       // ----------------------------------------------------------- Constructors
   
  @@ -244,6 +244,8 @@
       }
   
       /**
  +     * @deprecated use {@link #setRequestContentLength(long)} instead
  +     * 
        * Sets length information about the request body.
        *
        * <p>
  @@ -269,12 +271,37 @@
       }
   
       /**
  +     * Sets length information about the request body.
  +     *
  +     * <p>
  +     * Note: If you specify a content length the request is unbuffered. This
  +     * prevents redirection and automatic retry if a request fails the first
  +     * time. This means that the HttpClient can not perform authorization
  +     * automatically but will throw an Exception. You will have to set the
  +     * necessary 'Authorization' or 'Proxy-Authorization' headers manually.
  +     * </p>
  +     *
  +     * @param length size in bytes or any of CONTENT_LENGTH_AUTO,
  +     *        CONTENT_LENGTH_CHUNKED. If number of bytes or CONTENT_LENGTH_CHUNKED
  +     *        is specified the content will not be buffered internally and the
  +     *        Content-Length header of the request will be used. In this case
  +     *        the user is responsible to supply the correct content length.
  +     *        If CONTENT_LENGTH_AUTO is specified the request will be buffered
  +     *        before it is sent over the network.
  +     *
  +     */
  +    public void setRequestContentLength(long length) {
  +        LOG.trace("enter EntityEnclosingMethod.setRequestContentLength(int)");
  +        this.requestContentLength = length;
  +    }
  +
  +    /**
        * Override method of {@link org.apache.commons.httpclient.HttpMethodBase}
        * to return the length of the request body.
        *
        * @return number of bytes in the request body
        */
  -    protected int getRequestContentLength() {
  +    protected long getRequestContentLength() {
           LOG.trace("enter EntityEnclosingMethod.getRequestContentLength()");
   
           if (!hasRequestContent()) {
  @@ -309,7 +336,7 @@
   
           if ((getRequestHeader("content-length") == null) 
               && (getRequestHeader("Transfer-Encoding") == null)) {
  -            int len = getRequestContentLength();
  +            long len = getRequestContentLength();
               if (len >= 0) {
                   addRequestHeader("Content-Length", String.valueOf(len));
               } else if ((len == CONTENT_LENGTH_CHUNKED) && (isHttp11())) {
  @@ -404,7 +431,7 @@
               return true;
           }
   
  -        int contentLength = getRequestContentLength();
  +        long contentLength = getRequestContentLength();
   
           if ((contentLength == CONTENT_LENGTH_CHUNKED) && !isHttp11()) {
               throw new ProtocolException(
  
  
  
  1.19      +5 -11     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/MultipartPostMethod.java
  
  Index: MultipartPostMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/MultipartPostMethod.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- MultipartPostMethod.java	5 Jul 2003 18:43:04 -0000	1.18
  +++ MultipartPostMethod.java	15 Jul 2003 12:40:57 -0000	1.19
  @@ -250,16 +250,10 @@
        * 
        * @return The request content length.
        */
  -    protected int getRequestContentLength() {
  +    protected long getRequestContentLength() {
           LOG.trace("enter MultipartPostMethod.getRequestContentLength()");
           try {
  -            long len = Part.getLengthOfParts(getParts());
  -            // Chop the length to the max int value.
  -            if (len <= Integer.MAX_VALUE) {
  -                return (int) len;
  -            } else {
  -                return (Integer.MAX_VALUE);
  -            }
  +            return Part.getLengthOfParts(getParts());
           } catch (IOException e) {
               // Can't throw an IOException and still override
               throw new RuntimeException(e.toString());
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org