You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2008/03/03 16:09:30 UTC
svn commit: r633117 -
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
Author: dims
Date: Mon Mar 3 07:09:29 2008
New Revision: 633117
URL: http://svn.apache.org/viewvc?rev=633117&view=rev
Log:
Fix for AXIS2-3544 - Various bugs in deployment.Utils
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=633117&r1=633116&r2=633117&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java Mon Mar 3 07:09:29 2008
@@ -69,13 +69,15 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLDecoder;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Utils {
- public static String defaultEncoding = new OutputStreamWriter(System.out).getEncoding();
+ public static final String defaultEncoding = new OutputStreamWriter(System.out).getEncoding();
private static Log log = LogFactory.getLog(Utils.class);
@@ -130,18 +132,20 @@
}
public static URL[] getURLsForAllJars(URL url, File tmpDir) {
+ FileInputStream fin = null;
+ InputStream in = null;
+ ZipInputStream zin = null;
try {
ArrayList array = new ArrayList();
- InputStream in = url.openStream();
+ in = url.openStream();
String fileName = url.getFile();
int index = fileName.lastIndexOf('/');
if (index != -1) {
fileName = fileName.substring(index + 1);
}
File f = createTempFile(fileName, in, tmpDir);
- in.close();
- ZipInputStream zin;
- FileInputStream fin = new FileInputStream(f);
+
+ fin = new FileInputStream(f);
array.add(f.toURL());
zin = new ZipInputStream(fin);
@@ -160,13 +164,31 @@
array.add(f.toURL());
}
}
- zin.close();
- if (fin != null) {
- fin.close();
- }
return (URL[]) array.toArray(new URL[array.size()]);
} catch (Exception e) {
throw new RuntimeException(e);
+ } finally {
+ if (fin != null) {
+ try {
+ fin.close();
+ } catch (IOException e) {
+ //
+ }
+ }
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ //
+ }
+ }
+ if (zin != null) {
+ try {
+ zin.close();
+ } catch (IOException e) {
+ //
+ }
+ }
}
}
@@ -175,7 +197,9 @@
int count;
File f;
if (tmpDir == null) {
- new File(System.getProperty("java.io.tmpdir"), "_axis2").mkdirs();
+ if (! new File(System.getProperty("java.io.tmpdir"), "_axis2").mkdirs()) {
+ throw new IOException("Unable to create the directory");
+ }
File tempFile = new File(System.getProperty("java.io.tmpdir"), "_axis2");
f = File.createTempFile("axis2", suffix, tempFile);
} else {
@@ -207,7 +231,7 @@
* @return a new ClassLoader pointing to both the passed dir and jar files under lib/
* @throws DeploymentException if problems occur
*/
- public static ClassLoader getClassLoader(ClassLoader parent, File file)
+ public static ClassLoader getClassLoader(final ClassLoader parent, File file)
throws DeploymentException {
URLClassLoader classLoader;
@@ -243,11 +267,16 @@
}
}
- URL urllist[] = new URL[urls.size()];
+ final URL urllist[] = new URL[urls.size()];
for (int i = 0; i < urls.size(); i++) {
urllist[i] = (URL) urls.get(i);
}
- classLoader = new URLClassLoader(urllist, parent);
+ classLoader =
+ (URLClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ return new URLClassLoader(urllist, parent);
+ }
+ });
return classLoader;
} catch (MalformedURLException e) {
throw new DeploymentException(e);
@@ -366,8 +395,7 @@
}
MessageReceiver mr = axisService.getMessageReceiver(
operation.getMessageExchangePattern());
- if (mr != null) {
- } else {
+ if (mr == null) {
mr = axisConfig.getMessageReceiver(operation.getMessageExchangePattern());
}
if (operation.getMessageReceiver() == null) {
@@ -532,6 +560,7 @@
int leadingSlashes = 0;
for (leadingSlashes = 0; leadingSlashes < uri.length()
&& uri.charAt(leadingSlashes) == '/'; ++leadingSlashes) {
+ //FIXME: this block is empty!!
}
boolean isDir = (uri.charAt(uri.length() - 1) == '/');
StringTokenizer st = new StringTokenizer(uri, "/");
@@ -649,7 +678,7 @@
excludeList.add("shutDown");
}
- public static ClassLoader createClassLoader(ArrayList urls, ClassLoader serviceClassLoader,
+ public static ClassLoader createClassLoader(ArrayList urls, final ClassLoader serviceClassLoader,
boolean extractJars, File tmpDir) {
URL url = (URL) urls.get(0);
if (extractJars) {
@@ -657,16 +686,16 @@
URL[] urls1 = Utils.getURLsForAllJars(url, tmpDir);
urls.remove(0);
urls.addAll(0, Arrays.asList(urls1));
- URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
- return new DeploymentClassLoader(urls2, null, serviceClassLoader);
+ final URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
+ return createDeploymentClassLoader(urls2, serviceClassLoader, null);
} catch (Exception e){
log.warn("Exception extracting jars into temporary directory : " + e.getMessage() + " : switching to alternate class loading mechanism");
log.debug(e.getMessage(), e);
}
}
- List embedded_jars = Utils.findLibJars(url);
- URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
- return new DeploymentClassLoader(urls2, embedded_jars, serviceClassLoader);
+ final List embedded_jars = Utils.findLibJars(url);
+ final URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
+ return createDeploymentClassLoader(urls2, serviceClassLoader, embedded_jars);
}
public static ClassLoader createClassLoader(URL[] urls, ClassLoader serviceClassLoader,
@@ -674,14 +703,23 @@
if (extractJars) {
try {
URL[] urls1 = Utils.getURLsForAllJars(urls[0], tmpDir);
- return new DeploymentClassLoader(urls1, null, serviceClassLoader);
+ return createDeploymentClassLoader(urls1, serviceClassLoader, null);
} catch (Exception e){
log.warn("Exception extracting jars into temporary directory : " + e.getMessage() + " : switching to alternate class loading mechanism");
log.debug(e.getMessage(), e);
}
}
List embedded_jars = Utils.findLibJars(urls[0]);
- return new DeploymentClassLoader(urls, embedded_jars, serviceClassLoader);
+ return createDeploymentClassLoader(urls, serviceClassLoader, embedded_jars);
+ }
+
+
+ private static DeploymentClassLoader createDeploymentClassLoader(final URL[] urls, final ClassLoader serviceClassLoader, final List embeddedJars) {
+ return (DeploymentClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ return new DeploymentClassLoader(urls, embeddedJars, serviceClassLoader);
+ }
+ });
}
public static File toFile(URL url) throws UnsupportedEncodingException {
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org