code: public void finish() throws IOException 
      {
          if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
              logger.logp(Level.FINE, CLASS_NAME,"finish", "finish");
          } 
          // PM18453 start
          WebContainerRequestState requestState = WebContainerRequestState.getInstance(false);
          if (requestState != null && (Boolean.valueOf((String)requestState.getAttribute("InputStreamEarlyReadCompleted"))).booleanValue()) {
              if (TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                  logger.logp(Level.FINE, CLASS_NAME,"finish", "Skip read because data has already been read and destroyed.");
              } 
              total=limit;
          }
          // PM18453 End
          else if (!SRTServletResponse.isSkipInputStreamRead() &&  length != -1 )        {
              // if content length set then skip remaining bytes in message body
              long remaining = limit - total;   // PK79219
              while ( remaining > 0 )
              {
                  long n = skip(remaining);   // PM03146
                  if ( n == 0 )
                  {
                      // begin 280584.3    6021: Cleanup of  defect 280584.2    WAS.webcontainer
                      //logger.logp(Level.SEVERE, CLASS_NAME,"finish", nls.getString("Invalid.Content.Length"));
                      // end 280584.3    6021: Cleanup of  defect 280584.2    WAS.webcontainer
                      throw new IOException(nls.getString("Invalid.Content.Length","Invalid content length"));
                  }
                  remaining -= n;
              }
          }
      }
docs: Finishes reading the request without closing the underlying stream.
  @exception IOException if an I/O error has occurred