You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/02/14 19:35:55 UTC

svn commit: r627831 - /webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java

Author: dims
Date: Thu Feb 14 10:35:50 2008
New Revision: 627831

URL: http://svn.apache.org/viewvc?rev=627831&view=rev
Log:
HACK: Don't wait for the deployment engine to call us for individual files, when we get called on init, go thru the WEB-INF/classes and register all the classes with annotations in a new service group

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java?rev=627831&r1=627830&r2=627831&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java Thu Feb 14 10:35:50 2008
@@ -36,6 +36,7 @@
 import org.apache.axis2.util.Loader;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.commons.io.FileUtils;
 
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceProvider;
@@ -45,8 +46,11 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.net.URL;
+import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Collection;
 import java.util.jar.JarInputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
@@ -64,12 +68,65 @@
     //To initialize the deployer
     public void init(ConfigurationContext configCtx) {
         this.configCtx = configCtx;
+        deployServicesInWARClassPath();
     }//Will process the file and add that to axisConfig
 
+    private void deployServicesInWARClassPath() {
+        String dir = DeploymentEngine.getWebLocationString();
+        if (dir != null) {
+            File file = new File(dir + "/WEB-INF/classes/");
+            if (!file.isDirectory())
+                return;
+            ArrayList classList = getClassesInWebInfDirectory(file);
+            ClassLoader threadClassLoader = null;
+            try {
+                threadClassLoader = Thread.currentThread().getContextClassLoader();
+                ArrayList urls = new ArrayList();
+                urls.add(configCtx.getAxisConfiguration().getRepository());
+                String webLocation = DeploymentEngine.getWebLocationString();
+                if (webLocation != null) {
+                    urls.add(new File(webLocation).toURL());
+                }
+                ClassLoader classLoader = Utils.createClassLoader(
+                        urls,
+                        configCtx.getAxisConfiguration().getSystemClassLoader(),
+                        true,
+                        (File) configCtx.getAxisConfiguration().
+                                getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+                Thread.currentThread().setContextClassLoader(classLoader);
+                deployClasses("JAXWS-Builtin", file.toURL(), Thread.currentThread().getContextClassLoader(), classList);
+            } catch (Exception e) {
+                log.info(Messages.getMessage("deployingexception", e.getMessage()), e);
+            } finally {
+                if (threadClassLoader != null) {
+                    Thread.currentThread().setContextClassLoader(threadClassLoader);
+                }
+            }
+        }
+    }
+
+    private ArrayList getClassesInWebInfDirectory(File file) {
+        String filePath = file.getAbsolutePath();
+        Collection files = FileUtils.listFiles(file, new String[]{"class"}, true);
+        ArrayList classList = new ArrayList();
+        for (Iterator iterator = files.iterator(); iterator.hasNext();) {
+            File f = (File) iterator.next();
+            String fPath = f.getAbsolutePath();
+            String fqcn = fPath.substring(filePath.length() + 1);
+            fqcn = fqcn.substring(0, fqcn.length() - ".class".length());
+            fqcn = fqcn.replace('/', '.');
+            fqcn = fqcn.replace('\\', '.');
+            classList.add(fqcn);
+        }
+        return classList;
+    }
+
     public void deploy(DeploymentFileData deploymentFileData) {
         ClassLoader threadClassLoader = null;
         try {
             threadClassLoader = Thread.currentThread().getContextClassLoader();
+            String groupName = deploymentFileData.getName();
+            URL location = deploymentFileData.getFile().toURL();
             if (isJar(deploymentFileData.getFile())) {
                 log.info("Deploying artifact : " + deploymentFileData.getName());
                 ArrayList urls = new ArrayList();
@@ -88,38 +145,11 @@
                 Thread.currentThread().setContextClassLoader(classLoader);
 
                 ArrayList classList = getListOfClasses(deploymentFileData);
-                ArrayList axisServiceList = new ArrayList();
-                for (int i = 0; i < classList.size(); i++) {
-                    String className = (String) classList.get(i);
-                    className = className.replaceAll(".class", "");
-                    className = className.replaceAll("/", ".");
-
-                    Class pojoClass = Loader.loadClass(classLoader, className);
-                    WebService wsAnnotation = (WebService) pojoClass.getAnnotation(WebService.class);
-                    WebServiceProvider wspAnnotation = null;
-                    if (wsAnnotation == null) {
-                        wspAnnotation = (WebServiceProvider) pojoClass.getAnnotation(WebServiceProvider.class);
-                    }
-                    if (wsAnnotation != null || wspAnnotation != null) {
-                        AxisService axisService;
-                        axisService =
-                                createAxisService(classLoader,
-                                        className,
-                                        deploymentFileData.getFile().toURL());
-                        axisServiceList.add(axisService);
-                    }
-                }
-                if (axisServiceList.size() > 0) {
-                    AxisServiceGroup serviceGroup = new AxisServiceGroup();
-                    serviceGroup.setServiceGroupName(deploymentFileData.getName());
-                    for (int i = 0; i < axisServiceList.size(); i++) {
-                        AxisService axisService = (AxisService) axisServiceList.get(i);
-                        serviceGroup.addService(axisService);
-                    }
-                    configCtx.getAxisConfiguration().addServiceGroup(serviceGroup);
-                } else {
+                int count = deployClasses(groupName, location, classLoader, classList); 
+                
+                if(count == 0) {
                     String msg = "Error:\n No annotated classes found in the jar: " +
-                            deploymentFileData.getFile().getName() +
+                            location.toString() +
                             ". Service deployment failed.";
                     log.error(msg);
                     configCtx.getAxisConfiguration().getFaultyServices().
@@ -136,6 +166,39 @@
         }
     }
 
+    private int deployClasses(String groupName, URL location, ClassLoader classLoader, List classList)
+            throws ClassNotFoundException, InstantiationException, IllegalAccessException, AxisFault {
+        ArrayList axisServiceList = new ArrayList();
+        for (int i = 0; i < classList.size(); i++) {
+            String className = (String) classList.get(i);
+            Class pojoClass = Loader.loadClass(classLoader, className);
+            WebService wsAnnotation = (WebService) pojoClass.getAnnotation(WebService.class);
+            WebServiceProvider wspAnnotation = null;
+            if (wsAnnotation == null) {
+                wspAnnotation = (WebServiceProvider) pojoClass.getAnnotation(WebServiceProvider.class);
+            }
+            if (wsAnnotation != null || wspAnnotation != null) {
+                AxisService axisService;
+                axisService =
+                        createAxisService(classLoader,
+                                className,
+                                location);
+                axisServiceList.add(axisService);
+            }
+        }
+        int count = axisServiceList.size();
+        if (count > 0) {
+            AxisServiceGroup serviceGroup = new AxisServiceGroup();
+            serviceGroup.setServiceGroupName(groupName);
+            for (int i = 0; i < axisServiceList.size(); i++) {
+                AxisService axisService = (AxisService) axisServiceList.get(i);
+                serviceGroup.addService(axisService);
+            }
+            configCtx.getAxisConfiguration().addServiceGroup(serviceGroup);
+        }
+        return count;
+    }
+
     private ArrayList getListOfClasses(DeploymentFileData deploymentFileData) throws IOException {
         ArrayList classList;
         FileInputStream fin = null;
@@ -148,6 +211,8 @@
             while ((entry = zin.getNextEntry()) != null) {
                 String name = entry.getName();
                 if (name.endsWith(".class")) {
+                    name = name.replaceAll(".class", "");
+                    name = name.replaceAll("/", ".");
                     classList.add(name);
                 }
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org