All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wavemaker.commons.classloader.WMUrlClassLoader Maven / Gradle / Ivy

There is a newer version: 11.9.4
Show newest version
/**
 * Copyright (C) 2020 WaveMaker, Inc.
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.wavemaker.commons.classloader; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Collections; import java.util.Enumeration; import sun.misc.CompoundEnumeration; public class WMUrlClassLoader extends URLClassLoader { private String loaderContext; static { ClassLoader.registerAsParallelCapable(); } public WMUrlClassLoader(URL[] urls, String loaderContext, ClassLoader parent) { super(urls, parent); this.loaderContext = loaderContext; } public WMUrlClassLoader(URL[] urls, String loaderContext) { this(urls, loaderContext, Thread.currentThread().getContextClassLoader()); } @Override public String toString() { return "WMUrlClassLoader{loaderContext='" + loaderContext + '\'' +"} "; } /** * If we want to load a resource and it is available in both the parent classloader and the child classloader, * then the default behaviour is, first it will check in the parent classloader if it not found then it will check in the child classloader. * So if we want to load the this type resource, we will always get the resource from the parent classloader, child's resource will never get loaded. * * To solve this first we are checking in the child classloader, if it is not found then checking in the parent classloader. * @param name The resource name * @return A URL object for reading the resource, or * null if the resource could not be found or the invoker * doesn't have adequate privileges to get the resource. */ @Override public URL getResource(String name) { URL url = findResource(name); if (url == null) { url = super.getResource(name); } return url; } @Override public Enumeration getResources(String name) throws IOException { Enumeration[] tmp = (Enumeration[]) new Enumeration[2]; tmp[0] = findResources(name); tmp[1] = getParent() != null ? getParent().getResources(name) : Collections.emptyEnumeration(); return new CompoundEnumeration(tmp); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy