code: @Override
      public void sendResponseBody(WsByteBuffer[] body) throws IOException, MessageSentException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "sendResponseBody(body)");
          }
  
          if (!headersParsed()) {
              // request message must have the headers parsed prior to sending
              // any data out (this is a completely invalid state in the channel
              // above)
              IOException ioe = new IOException("Request not read yet");
              FFDCFilter.processException(ioe, CLASS_NAME + ".sendResponseBody", "684");
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Attempt to send response without a request msg");
              }
              throw ioe;
          }
  
          if (isMessageSent()) {
              throw new MessageSentException("Message already sent");
          }
  
          // if headers haven't been sent, then set for partial body transfer
          if (!headersSent()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "sendBody() setting partial body true");
              }
              setPartialBody(true);
          }
  
          sendOutgoing(body, getResponseImpl());
      }
docs: Send the given body buffers for the outgoing response synchronously.
  If chunked encoding is set or if the partialbody flag is set, then
  each call to this method will be considered a "chunk" and encoded
  as such. If the message is Content-Length defined, then the buffers
  will simply be sent out without modifications.
  <p>
  Note: if headers have not already been sent, then the first call to this
  method will send the headers.
  
  @param body
  @throws IOException
  -- if a socket exception occurs
  @throws MessageSentException
  -- if a finishMessage API was already used