org.apache.ws.security.util.Loader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wss4j Show documentation
Show all versions of wss4j Show documentation
The Apache WSS4J project provides a Java implementation of the primary security standards
for Web Services, namely the OASIS Web Services Security (WS-Security) specifications
from the OASIS Web Services Security TC.
/*
* Copyright 2003-2004 The Apache Software Foundation.
*
* 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 org.apache.ws.security.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
/**
* Load resources (or images) from various sources.
*
*
* @author Davanum Srinivas ([email protected]).
*/
public class Loader {
private static Log log = LogFactory.getLog(Loader.class.getName());
/**
* This method will search for resource
in different
* places. The rearch order is as follows:
*
* - Search for
resource
using the thread context
* class loader under Java2. If that fails, search for
* resource
using the class loader that loaded this
* class (Loader
).
* - Try one last time with
*
ClassLoader.getSystemResource(resource)
, that is is
* using the system class loader in JDK 1.2 and virtual machine's
* built-in class loader in JDK 1.1.
*
*
*
* @param resource
* @return TODO
*/
static public URL getResource(String resource) {
ClassLoader classLoader = null;
URL url = null;
try {
// We could not find resource. Ler us now try with the
// classloader that loaded this class.
classLoader = getTCL();
if (classLoader != null) {
log.debug("Trying to find [" + resource + "] using " + classLoader + " class loader.");
url = classLoader.getResource(resource);
if (url != null) {
return url;
}
}
} catch (Throwable t) {
log.warn("Caught Exception while in Loader.getResource. This may be innocuous.", t);
}
// Last ditch attempt: get the resource from the class path. It
// may be the case that clazz was loaded by the Extentsion class
// loader which the parent of the system class loader. Hence the
// code below.
log.debug("Trying to find [" + resource + "] using ClassLoader.getSystemResource().");
return ClassLoader.getSystemResource(resource);
}
/**
* Try to get the resource with the specified class loader
*
*
* @param cl
* @param clazz
* @return Class
* @throws ClassNotFoundException
*/
static public URL getResource(ClassLoader loader, String resource) {
URL url = null;
try {
if (loader != null) {
log.debug("Trying to find [" + resource + "] using " + loader + " class loader.");
url = loader.getResource(resource);
if (url != null) {
return url;
}
}
} catch (Throwable t) {
log.warn("Caught Exception while in Loader.getResource. This may be innocuous.", t);
}
return getResource(resource);
}
/**
* Get the Thread context class loader.
*
*
* @return
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
static public ClassLoader getTCL() throws IllegalAccessException, InvocationTargetException {
return Thread.currentThread().getContextClassLoader();
}
/**
* Try the specified classloader and then fall back to the loadClass
*
*
* @param cl
* @param clazz
* @return Class
* @throws ClassNotFoundException
*/
static public Class loadClass(ClassLoader loader, String clazz) throws ClassNotFoundException {
try {
if(loader != null) {
Class c = loader.loadClass(clazz);
if (c != null)
return c;
}
} catch (Throwable e) {
}
return loadClass(clazz);
}
/**
* If running under JDK 1.2 load the specified class using the
* Thread
contextClassLoader
if that
* fails try Class.forname.
*
*
* @param clazz
* @return TODO
* @throws ClassNotFoundException
*/
static public Class loadClass(String clazz) throws ClassNotFoundException {
try {
ClassLoader tcl = getTCL();
if(tcl != null) {
Class c = tcl.loadClass(clazz);
if (c != null)
return c;
}
} catch (Throwable e) {
}
// we reached here because tcl was null or because of a
// security exception, or because clazz could not be loaded...
// In any case we now try one more time
return Class.forName(clazz);
}
}