file = file + "/" + url_string;
file = file.substring(0, idx + 1) + url_string;
  protected void parseURL (URL url, String url_string, int start, int end)  {    // This method does not throw an exception or return a value.  Thus our    // strategy when we encounter an error in parsing is to return without    // doing anything.    String file = url.getFile();        if (file != null        && file != "")      { //has context url	url_string = url_string.substring (start, end);        if (url_string.startsWith("/"))          { //url string is an absolute path            int idx = file.lastIndexOf ("!/");            if (idx == -1) //context path is weird                file = file + "!" + url_string;             else                file = file.substring (0, idx + 1) + url_string;          }        else          {            int idx = file.lastIndexOf ("/");            if (idx == -1) //context path is weird              file = "/" + url_string;             else if (idx == (file.length() - 1))              //just concatenate two parts              file = file + url_string;            else              // according to Java API Documentation, here is a little different               // with URLStreamHandler.parseURL              // but JDK seems doesn't handle it well              file = file + "/" + url_string;          }                setURL (url, "jar", url.getHost(), url.getPort(), file, null);        return;      }    // Bunches of things should be true.  Make sure.    if (end < start)      return;    if (end - start < 2)      return;    if (start > url_string.length())      return;        // Skip remains of protocol    url_string = url_string.substring (start, end);        if (!url.getProtocol().equals ("jar") )      return;            setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);  }