code: VirtualConnection parseResponseMessageAsync() {
  
          VirtualConnection readVC = null;
          try {
              do {
                  if (parseMessage()) {
                      // finished parsing the message
                      return getVC();
                  }
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Reading for more data to parse");
                  }
                  // configure the buffers for reading
                  setupReadBuffers(getHttpConfig().getIncomingHdrBufferSize(), false);
                  readVC = getTSC().getReadInterface().read(1, HttpOSCReadCallback.getRef(), false, getReadTimeout());
              } while (null != readVC);
          } catch (Exception e) {
              // no FFDC required
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Exception while parsing response: " + e);
              }
              setPersistent(false);
              // LI4335 - early reads also use read callback
              if (this.bEarlyReads || this.bTempResponsesUsed) {
                  getAppReadCallback().error(getVC(), e);
              } else {
                  getAppWriteCallback().error(getVC(), e);
              }
              return null;
          }
  
          // getting here means an async read is in-progress
          return null;
      }
docs: Method to clean the service context and read another response message
  asynchronously. This will return a non-null virtual connection object
  if the new response message is fully parsed with no async reads needed.
  Otherwise, it will return null and a callback will be used later.
  
  @return VirtualConnection