bundleId = str.substring(start,slash); path = str.substring(slash,end);
bundleId = spec.substring(2,slash); path = spec.substring(slash,pathEnd);
    protected void parseURL(URL url, String str, int start, int end)    {    	if (end <= start) {    		return;    	}		// Check the permission of the caller to see if they		// are allowed access to the resource.		checkAdminPermission();    	String bundleId,path;    	if (str.startsWith(url.getProtocol())) {    		if (str.charAt(start) != '/' || str.charAt(start+1) != '/')    			throw new IllegalArgumentException(AdaptorMsg.formatter.getString("URL_IS_OPAQUE",url.getProtocol()));    		start += 2;    		int slash = str.indexOf("/",start);    		if (slash < 0) {    			throw new IllegalArgumentException(AdaptorMsg.formatter.getString("URL_NO_PATH"));    		}    		bundleId = str.substring(start,slash);    		path = str.substring(slash,end);    	}    	else {    		// A call to a URL constructor has been made that    		// uses an authorized URL as its context.    		bundleId = url.getHost();    		if (str.length() > 0 && str.charAt(0) == '/') {    			// does not specify a relative path.				path = str;			}     		else {    			// relative path specified.				StringBuffer pathBuffer = new StringBuffer(url.getPath());				if (pathBuffer.charAt(pathBuffer.length() - 1) != '/')					pathBuffer.append('/');				pathBuffer.append(str);				path = pathBuffer.toString();			}    		// null out bundleEntry because it will not be valid for the new path    		bundleEntry = null;    	}    	// Setting the authority portion of the URL to SECURITY_ATHORIZED    	// ensures that this URL was created by using this parseURL    	// method.  The openConnection method will only open URLs    	// that have the authority set to this.    	setURL(url, url.getProtocol(), bundleId, 0, SECURITY_AUTHORIZED, null, path, null, null);    }