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