code: private void parseSpecs(URL url) throws MalformedURLException
      {
          String spec = url.getFile();
  
          int separator = spec.indexOf('!');
          /*
           * REMIND: we don't handle nested JAR URLs
           */
          if (separator == -1) {
              throw new MalformedURLException("no ! found in url spec:" + spec);
          }
  
          // Get the protocol
          String protocol = spec.substring(0, spec.indexOf(":"));
  
          // This is the important part: we use a URL Stream Handler Factory to find the URL Stream handler to use for
          // the nested protocol.
          this.jarFileURL =
              new URL(null, spec.substring(0, separator++), this.handlerFactory.createURLStreamHandler(protocol));
          this.entryName = null;
  
          /* if ! is the last letter of the innerURL, entryName is null */
          if (++separator != spec.length()) {
              this.entryName = spec.substring(separator, spec.length());
              try {
                  // Note: we decode using UTF8 since it's the W3C recommendation.
                  // See http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars
                  this.entryName = URLDecoder.decode(this.entryName, "UTF-8");
              } catch (UnsupportedEncodingException e) {
                  // Not supporting UTF-8 as a valid encoding for some reasons. We consider XWiki cannot work
                  // without that encoding.
                  throw new RuntimeException("Failed to URL decode [" + this.entryName + "] using UTF-8.", e);
              }
          }
      }
docs: /*
  get the specs for a given url out of the cache, and compute and cache them if they're not there.