code: public java.net.URI toJavaURI() throws URISyntaxException {
          if (isHierarchical) {
              return new URI(scheme(),
                      (!"".equals(userInfo()))? URLUtils.percentDecode(userInfo()) : null,
                      (host() != null)? host().toString() : null,
                      port,
                      (path() != null)? URLUtils.percentDecode(path()) : null,
                      (query() != null)? URLUtils.percentDecode(query()) : null,
                      (fragment() != null)? URLUtils.percentDecode(fragment()) : null
              );
          }
          return new URI(scheme(),
                  URLUtils.percentDecode(schemeData()) + ((query() == null)? "" : "?" + URLUtils.percentDecode(query())),
                  (fragment() != null)? URLUtils.percentDecode(fragment()) : null
          );
      }
docs: Converts to {@link java.net.URI}.
  
  Conversion to {@link java.net.URI} will throw
  {@link java.net.URISyntaxException} if the URL contains
  unescaped unsafe characters as defined in RFC 2396.
  In order to prevent this, force RFC 2396 compliance when
  parsing the URL. For example:
  
  NOTE 1: This will not make distinction between no user and password and just empty
  user and no password.
  <pre>
  <code>
  URL.parse("http://example.com").toJavaURI().toString() -> "http://example.com"
  URL.parse("http://@example.com").toJavaURI().toString() -> "http://example.com"
  </code>
  </pre>
  
  TODO: Check if this exception can actually be thrown
  
  @return