docs: @Override
      public WsByteBuffer[] getRequestBodyBuffers() throws IOException, IllegalHttpBodyException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "getRequestBodyBuffers(sync)");
          }
          if (!headersParsed()) {
              // request message must have the headers parsed prior to attempting
              // to read a body (this is a completely invalid state in the channel
              // above)
              IOException ioe = new IOException("Request not read yet");
              FFDCFilter.processException(ioe, CLASS_NAME + ".getRequestBodyBuffers", "1281");
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Attempt to read a body without headers");
              }
              throw ioe;
          }
  
          // check to see if a body is allowed before reading for one
          if (!isIncomingBodyValid()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                  Tr.exit(tc, "getRequestBodyBuffers(sync): No body allowed");
              }
              return null;
          }
  
          WsByteBuffer[] buffers = null;
          setMultiRead(true);
  
          // read the buffers if need be
          if (!isBodyComplete()) {
              try {
                  readBodyBuffers(getRequestImpl(), false);
              } catch (BodyCompleteException e) {
                  // no FFDC required
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                      Tr.exit(tc, "getRequestBodyBuffers(sync): BodyCompleteException");
                  }
                  return null;
              }
          }
          buffers = getAllStorageBuffers();
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "getRequestBodyBuffers(sync): " + ((null == buffers) ? 0 : buffers.length));
          }
          return buffers;
      }