docs: public URL getResource(String p) throws MalformedURLException
    {
      String rPath = null;
  
     /*
       * The spec states the resource must start with a / so if one isn't there we
       * prepend one.
       */
      // Begin 263020
      if (p.charAt(0) != '/' && p.charAt(0) != '\\')
      {
        if (prependSlashToResource)
        {
          logger.logp(Level.WARNING, CLASS_NAME, "getResource", "resource.path.has.to.start.with.slash");
          rPath = "/" + p;
        }
        else
        {
          throw new MalformedURLException(nls.getString("resource.path.has.to.start.with.slash"));
        }
      }
      else
      {
        rPath = p;
      }
      // End 263020
      
      if (container != null) {
          //Can not call getEntry with / on the root container
          if (p.equals("/")) {
              Collection<URL> urls = container.getURLs();
              Iterator<URL> it = urls.iterator();
              if (it.hasNext()) {
                  URL url = it.next();  //get the first url
                  
                  if (url.getProtocol().equals("file")) { 
                      File file = new File(url.getFile());
                      if (file.exists() && !file.isDirectory()){  //might be a file:/xxx.war
                          return new URL("jar", "", -1, url + "!/");  //return jar:file:/xxx.war!/
                      }
                  } 
  
                  return url;
              }
          } else {
              Entry entry = container.getEntry(rPath);
              if (entry != null) {
                  return entry.getResource();
              } else {
                  return getDocumentRootUtils(rPath).getURL(rPath,metaInfCache);
              }
          }
      }
  
      String uri = getRealPath(rPath);
      if (uri == null)
      {
        return null;
      }
  
      java.io.File checkFile = new java.io.File(uri);
      if (!checkFile.exists())
      {
        if (!WCCustomProperties.SKIP_META_INF_RESOURCES_PROCESSING)
        {
          if (useMetaInfCache)
          {
            if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINE))
            {
              logger.logp(Level.FINE, CLASS_NAME, "getResource", "trying META-INF/resources cache");
            }
            synchronized (metaInfCache)
            {
              if (metaInfCache.containsKey(rPath))
              {
                URL cachedURL = metaInfCache.get(rPath);
                if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINE))
                {
                  logger.logp(Level.FINE, CLASS_NAME, "getResource", "got cached META-INF name->[{0}], URL->[{1}]", new Object[] { rPath, cachedURL });
                }
                return cachedURL;
              }
            }
          }
          // URL otherURL = getWebInfLibClassloader().getResource(metaInfPath);
          MetaInfResourcesFileUtils metaInfFileUtil = new MetaInfResourcesFileUtils(this);
          metaInfFileUtil.findInMetaInfResource(rPath);
          URL metaInfURL = metaInfFileUtil.getURL();
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINE))
          {
            logger.logp(Level.FINE, CLASS_NAME, "getResource", "file did not exist, trying META-INF/resources");
            logger.logp(Level.FINE, CLASS_NAME, "getResource", "metaInfPath->/META-INF/resources" + rPath);
          }
          if (useMetaInfCache)
          {
            if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINE))
            {
              logger.logp(Level.FINE, CLASS_NAME, "getResource", "adding to META-INF cache name->[{0}], URL->[{1}]", new Object[] { rPath, metaInfURL });
            }
            synchronized (metaInfCache)
            {
              metaInfCache.put(rPath, metaInfURL);
            }
          }
          return metaInfURL;
  
        }
        else
        {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINE))
          {
            logger.logp(Level.FINE, CLASS_NAME, "getResource", "skipping META-INF/resources processing");
          }
          return null;
        }
      }
      return checkFile.toURL();
  
    }