docs: @Override
      public void setRequestURL(byte[] url) {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
              Tr.event(tc, "setRequestURL input [" + GenericUtils.nullOutPasswords(url, (byte) '&') + "]");
          }
          if (null == url || 0 == url.length) {
              throw new IllegalArgumentException("setRequestURL: null URL");
          }
  
          // setup certain default values now
          super.setFirstLineChanged();
          initScheme();
          this.myURIString = null;
          this.sUrlHost = null;
          this.iUrlPort = HeaderStorage.NOTSET;
          this.myQueryBytes = null;
          this.queryParams = null;
          // either starts with "/", "//", "*", or alpha chars
          if ('*' == url[0]) {
              if (1 == url.length) {
                  // only a *
                  this.myURIBytes = STAR;
              } else if ('?' == url[1]) {
                  // a * following by query data
                  parseURI(url, 0);
              } else {
                  // invalid uri
                  throw new IllegalArgumentException("Invalid leading * : " + GenericUtils.getEnglishString(url));
              }
          } else if ('/' == url[0]) {
              if (1 == url.length) {
                  // just a /
                  this.myURIBytes = SLASH;
              } else if ('/' == url[1] && getServiceContext().getHttpConfig().isStrictURLFormat()) {
                  // starts with "//". Only parse the authority if we are in a
                  // strict compliance setting, otherwise assume anything with a
                  // leading slash is just the URI
                  parseAuthority(url, 2);
              } else {
                  // starts with just "/xx"
                  parseURI(url, 0);
              }
          }
          // otherwise we should be looking at alpha chars and the scheme
          else if (isAlpha(url[0])) {
              parseScheme(url);
          } else if (url[0] == '?') { //PI42523 Start
              // Inject Slash to the beginning of the URL if the URL is
              // composed of only the query
              byte[] injectRootURL = new byte[url.length + 1];
              injectRootURL[0] = '/';
              for (int i = 1; i < injectRootURL.length; i++) {
                  injectRootURL[i] = url[i - 1];
              }
              parseURI(injectRootURL, 0);// PI42523 End
          } else {
              throw new IllegalArgumentException("setRequestURL: invalid URL: " + GenericUtils.getEnglishString(url));
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "setRequestURL: set URI to " + getRequestURI());
          }
      }