HBASE-12491 TableMapReduceUtil.findContainingJar() NPE
This commit is contained in:
parent
b12d57783f
commit
84d9f0ec26
|
@ -900,25 +900,28 @@ public class TableMapReduceUtil {
|
|||
private static String findContainingJar(Class<?> my_class, Map<String, String> packagedClasses)
|
||||
throws IOException {
|
||||
ClassLoader loader = my_class.getClassLoader();
|
||||
|
||||
String class_file = my_class.getName().replaceAll("\\.", "/") + ".class";
|
||||
|
||||
// first search the classpath
|
||||
for (Enumeration<URL> itr = loader.getResources(class_file); itr.hasMoreElements();) {
|
||||
URL url = itr.nextElement();
|
||||
if ("jar".equals(url.getProtocol())) {
|
||||
String toReturn = url.getPath();
|
||||
if (toReturn.startsWith("file:")) {
|
||||
toReturn = toReturn.substring("file:".length());
|
||||
if (loader != null) {
|
||||
// first search the classpath
|
||||
for (Enumeration<URL> itr = loader.getResources(class_file); itr.hasMoreElements();) {
|
||||
URL url = itr.nextElement();
|
||||
if ("jar".equals(url.getProtocol())) {
|
||||
String toReturn = url.getPath();
|
||||
if (toReturn.startsWith("file:")) {
|
||||
toReturn = toReturn.substring("file:".length());
|
||||
}
|
||||
// URLDecoder is a misnamed class, since it actually decodes
|
||||
// x-www-form-urlencoded MIME type rather than actual
|
||||
// URL encoding (which the file path has). Therefore it would
|
||||
// decode +s to ' 's which is incorrect (spaces are actually
|
||||
// either unencoded or encoded as "%20"). Replace +s first, so
|
||||
// that they are kept sacred during the decoding process.
|
||||
toReturn = toReturn.replaceAll("\\+", "%2B");
|
||||
toReturn = URLDecoder.decode(toReturn, "UTF-8");
|
||||
return toReturn.replaceAll("!.*$", "");
|
||||
}
|
||||
// URLDecoder is a misnamed class, since it actually decodes
|
||||
// x-www-form-urlencoded MIME type rather than actual
|
||||
// URL encoding (which the file path has). Therefore it would
|
||||
// decode +s to ' 's which is incorrect (spaces are actually
|
||||
// either unencoded or encoded as "%20"). Replace +s first, so
|
||||
// that they are kept sacred during the decoding process.
|
||||
toReturn = toReturn.replaceAll("\\+", "%2B");
|
||||
toReturn = URLDecoder.decode(toReturn, "UTF-8");
|
||||
return toReturn.replaceAll("!.*$", "");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue