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/13 23:02:43 UTC

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

Author: dims
Date: Wed Feb 13 14:02:38 2008
New Revision: 627599

URL: http://svn.apache.org/viewvc?rev=627599&view=rev
Log:
- Better check for a jar file
- move from test to src
- eliminate the remaining uses of reflection
- eliminate the remaining use of rpc message receiver
- remove remnants of annogen
- add a couple of more urls to the class loader for the wsdl/xsd's to get picked up


Added:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
      - copied, changed from r627561, webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
Removed:
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java

Copied: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (from r627561, webservices/axis2/trunk/java/modules/jaxws/test/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?p2=webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java&p1=webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java&r1=627561&r2=627599&rev=627599&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java Wed Feb 13 14:02:38 2008
@@ -18,40 +18,39 @@
  */
 package org.apache.axis2.jaxws.framework;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceProvider;
-
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.deployment.Deployer;
 import org.apache.axis2.deployment.DeploymentErrorMsgs;
 import org.apache.axis2.deployment.DeploymentException;
+import org.apache.axis2.deployment.DeploymentEngine;
 import org.apache.axis2.deployment.repository.util.DeploymentFileData;
 import org.apache.axis2.deployment.util.Utils;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
-import org.apache.axis2.description.WSDL2Constants;
-import org.apache.axis2.engine.MessageReceiver;
 import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.server.JAXWSMessageReceiver;
 import org.apache.axis2.util.Loader;
-import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceProvider;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.jar.JarInputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
 /*
  * JAXWSDeployer is a custom deployer modeled after the POJODeployer. Its purpose
  * is to deploy .wars and expanded .war directories
@@ -71,73 +70,44 @@
         ClassLoader threadClassLoader = null;
         try {
             threadClassLoader = Thread.currentThread().getContextClassLoader();
-            String extension = DeploymentFileData.getFileExtension(deploymentFileData.getName());
-            if ("war".equals(extension) || "jar".equals(extension)) {
-                ArrayList classList;
-                FileInputStream fin = null;
-                ZipInputStream zin = null;
-                try {
-                    fin = new FileInputStream(deploymentFileData.getAbsolutePath());
-                    zin = new ZipInputStream(fin);
-                    ZipEntry entry;
-                    classList = new ArrayList();
-                    while ((entry = zin.getNextEntry()) != null) {
-                        String name = entry.getName();
-                        if (name.endsWith(".class")) {
-                            classList.add(name);
-                        }
-                    }
-                    zin.close();
-                    fin.close();
-                } catch (Exception e) {
-                    log.debug(Messages.getMessage("deployingexception",e.getMessage()),e);
-                    throw new DeploymentException(e);
-                } finally {
-                    if (zin != null) {
-                        zin.close();
-                    }
-                    if (fin != null) {
-                        fin.close();
-                    }
+            if (isJar(deploymentFileData.getFile())) {
+                log.info("Deploying artifact : " + deploymentFileData.getName());
+                ArrayList urls = new ArrayList();
+                urls.add(deploymentFileData.getFile().toURL());
+                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);
+
+                ArrayList classList = getListOfClasses(deploymentFileData);
                 ArrayList axisServiceList = new ArrayList();
                 for (int i = 0; i < classList.size(); i++) {
                     String className = (String) classList.get(i);
-                    ClassLoader classLoader = Utils.createClassLoader(
-                            new URL[]{deploymentFileData.getFile().toURL()},
-                            configCtx.getAxisConfiguration().getSystemClassLoader(),
-                            true,
-                            (File) configCtx.getAxisConfiguration().
-                                    getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
-                    Thread.currentThread().setContextClassLoader(classLoader);
                     className = className.replaceAll(".class", "");
                     className = className.replaceAll("/", ".");
-                    
-                    try {
-                        Class claxx = Class.forName(className);
-                    	
-                        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);
-                        }
-                    } catch (Exception e) {
-                    	// Seems like the jax-ws jars missing in the class path .
-                    	// lets try with annogen
-                    	log.debug(Messages.getMessage("jaxwsjarsmissing",e.getMessage()),e);
-                    	//axisService = createAxisServiceUsingAnnogen(className, classLoader, serviceLocation);
-                    }
-
 
+                    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();
@@ -149,20 +119,15 @@
                     configCtx.getAxisConfiguration().addServiceGroup(serviceGroup);
                 } else {
                     String msg = "Error:\n No annotated classes found in the jar: " +
-                                 deploymentFileData.getFile().getName() +
-                                 ". Service deployment failed.";
+                            deploymentFileData.getFile().getName() +
+                            ". Service deployment failed.";
                     log.error(msg);
                     configCtx.getAxisConfiguration().getFaultyServices().
                             put(deploymentFileData.getFile().getAbsolutePath(), msg);
                 }
-            } 
-            //TODO: Possible other extensions here
-            //else if () {}
-        } catch (Exception e) {
-             log.debug(Messages.getMessage("stroringfaultyservice",e.getMessage()),e);
-            storeFaultyService(deploymentFileData, e);
+            }
         } catch (Throwable t) {
-            log.debug(Messages.getMessage("stroringfaultyservice",t.getMessage()),t);
+            log.debug(Messages.getMessage("stroringfaultyservice", t.getMessage()), t);
             storeFaultyService(deploymentFileData, t);
         } finally {
             if (threadClassLoader != null) {
@@ -171,6 +136,37 @@
         }
     }
 
+    private ArrayList getListOfClasses(DeploymentFileData deploymentFileData) throws IOException {
+        ArrayList classList;
+        FileInputStream fin = null;
+        ZipInputStream zin = null;
+        try {
+            fin = new FileInputStream(deploymentFileData.getAbsolutePath());
+            zin = new ZipInputStream(fin);
+            ZipEntry entry;
+            classList = new ArrayList();
+            while ((entry = zin.getNextEntry()) != null) {
+                String name = entry.getName();
+                if (name.endsWith(".class")) {
+                    classList.add(name);
+                }
+            }
+            zin.close();
+            fin.close();
+        } catch (Exception e) {
+            log.debug(Messages.getMessage("deployingexception", e.getMessage()), e);
+            throw new DeploymentException(e);
+        } finally {
+            if (zin != null) {
+                zin.close();
+            }
+            if (fin != null) {
+                fin.close();
+            }
+        }
+        return classList;
+    }
+
     private void storeFaultyService(DeploymentFileData deploymentFileData, Throwable t) {
         StringWriter errorWriter = new StringWriter();
         PrintWriter ptintWriter = new PrintWriter(errorWriter);
@@ -183,116 +179,26 @@
     private AxisService createAxisService(ClassLoader classLoader,
                                           String className,
                                           URL serviceLocation) throws ClassNotFoundException,
-                                                                      InstantiationException,
-                                                                      IllegalAccessException,
-                                                                      AxisFault {
-        AxisService axisService = null;
-        try {
-            Class claxx = Class.forName(
-                    "org.apache.axis2.jaxws.description.DescriptionFactory");
-            Method mthod = claxx.getMethod(
-                    "createAxisService",
-                    new Class[]{Class.class});
-            Class pojoClass = Loader.loadClass(classLoader, className);
-            axisService =
-                    (AxisService) mthod.invoke(claxx, new Object[]{pojoClass});
-            if (axisService != null) {
-                Iterator operations = axisService.getOperations();
-                while (operations.hasNext()) {
-                    AxisOperation axisOperation = (AxisOperation) operations.next();
-                    if (axisOperation.getMessageReceiver() == null) {
-                        try {
-                            Class jaxwsMR = Loader.loadClass(
-                                    "org.apache.axis2.jaxws.server.JAXWSMessageReceiver");
-                            MessageReceiver jaxwsMRInstance =
-                                    (MessageReceiver) jaxwsMR.newInstance();
-                            axisOperation.setMessageReceiver(jaxwsMRInstance);
-                        } catch (Exception e) {
-                            log.debug("Error occurde while loading JAXWSMessageReceiver for "
-                                    + className );
-                        }
-                    }
+            InstantiationException,
+            IllegalAccessException,
+            AxisFault {
+        Class pojoClass = Loader.loadClass(classLoader, className);
+        AxisService axisService = DescriptionFactory.createAxisService(pojoClass);
+        if (axisService != null) {
+            Iterator operations = axisService.getOperations();
+            while (operations.hasNext()) {
+                AxisOperation axisOperation = (AxisOperation) operations.next();
+                if (axisOperation.getMessageReceiver() == null) {
+                    axisOperation.setMessageReceiver(new JAXWSMessageReceiver());
                 }
             }
-            axisService.setElementFormDefault(false);
-            axisService.setFileName(serviceLocation);
-           //Not needed at this case, the message receivers always set to RPC if this executes
-            //setMessageReceivers(axisService);
-            
-        } catch (Exception e) {
-            // Seems like the jax-ws jars missing in the class path .
-            // lets try with annogen
-            log.debug(Messages.getMessage(DeploymentErrorMsgs.JAXWS_JARS_MISSING,e.getMessage()),e);
-            //axisService = createAxisServiceUsingAnnogen(className, classLoader, serviceLocation);
         }
-        return axisService;
-    }
-
-    private AxisService createAxisServiceUsingAnnogen(String className,
-                                                      ClassLoader classLoader,
-                                                      URL serviceLocation)
-            throws ClassNotFoundException,
-                   InstantiationException,
-                   IllegalAccessException,
-                   AxisFault {
-        HashMap messageReciverMap = new HashMap();
-        Class inOnlyMessageReceiver = Loader.loadClass(
-                "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver");
-        MessageReceiver messageReceiver =
-                (MessageReceiver) inOnlyMessageReceiver.newInstance();
-        messageReciverMap.put(WSDL2Constants.MEP_URI_IN_ONLY,
-                              messageReceiver);
-        Class inoutMessageReceiver = Loader.loadClass(
-                "org.apache.axis2.rpc.receivers.RPCMessageReceiver");
-        MessageReceiver inOutmessageReceiver =
-                (MessageReceiver) inoutMessageReceiver.newInstance();
-        messageReciverMap.put(WSDL2Constants.MEP_URI_IN_OUT,
-                              inOutmessageReceiver);
-        messageReciverMap.put(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY,
-                              inOutmessageReceiver);
-        AxisService axisService =
-                AxisService.createService(className,
-                                          configCtx.getAxisConfiguration(),
-                                          messageReciverMap,
-                                          null, null,
-                                          classLoader);
+        axisService.setElementFormDefault(false);
         axisService.setFileName(serviceLocation);
+        log.info("Deploying JAXWS Service : " + className);
         return axisService;
     }
 
-    public void setMessageReceivers(AxisService service) {
-        Iterator iterator = service.getOperations();
-        while (iterator.hasNext()) {
-            AxisOperation operation = (AxisOperation) iterator.next();
-            String MEP = operation.getMessageExchangePattern();
-            if (MEP != null) {
-                try {
-                    if (WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_ONLY.equals(MEP)
-                        || WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_ONLY.equals(MEP)
-                        || WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP)) {
-                        Class inOnlyMessageReceiver = Loader.loadClass(
-                                "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver");
-                        MessageReceiver messageReceiver =
-                                (MessageReceiver) inOnlyMessageReceiver.newInstance();
-                        operation.setMessageReceiver(messageReceiver);
-                    } else {
-                        Class inoutMessageReceiver = Loader.loadClass(
-                                "org.apache.axis2.rpc.receivers.RPCMessageReceiver");
-                        MessageReceiver inOutmessageReceiver =
-                                (MessageReceiver) inoutMessageReceiver.newInstance();
-                        operation.setMessageReceiver(inOutmessageReceiver);
-                    }
-                } catch (ClassNotFoundException e) {
-                    log.error(e.getMessage(), e);
-                } catch (InstantiationException e) {
-                    log.error(e.getMessage(), e);
-                } catch (IllegalAccessException e) {
-                    log.error(e.getMessage(), e);
-                }
-            }
-        }
-    }
-
     public void setDirectory(String directory) {
     }
 
@@ -301,32 +207,37 @@
 
     public void unDeploy(String fileName) {
         fileName = Utils.getShortFileName(fileName);
-        if (fileName.endsWith(".class")) {
-            String className = fileName.replaceAll(".class", "");
-            try {
-                AxisServiceGroup serviceGroup =
-                        configCtx.getAxisConfiguration().removeServiceGroup(className);
-                configCtx.removeServiceGroupContext(serviceGroup);
-                log.info(Messages.getMessage(DeploymentErrorMsgs.SERVICE_REMOVED,
-                                             fileName));
-            } catch (AxisFault axisFault) {
-                //May be a faulty service
-                log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL,axisFault.getMessage()),axisFault);
-                configCtx.getAxisConfiguration().removeFaultyService(fileName);
-            }
-        } else if (fileName.endsWith(".jar")) {
+        if (isJar(new File(fileName))) {
             try {
                 AxisServiceGroup serviceGroup =
                         configCtx.getAxisConfiguration().removeServiceGroup(fileName);
                 configCtx.removeServiceGroupContext(serviceGroup);
                 log.info(Messages.getMessage(DeploymentErrorMsgs.SERVICE_REMOVED,
-                                             fileName));
+                        fileName));
             } catch (AxisFault axisFault) {
                 //May be a faulty service
-                log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL,axisFault.getMessage()),axisFault);
+                log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL, 
+                        axisFault.getMessage()), axisFault);
                 configCtx.getAxisConfiguration().removeFaultyService(fileName);
             }
         }
+    }
+
+    /**
+     * Check if this inputstream is a jar/zip
+     *
+     * @param is
+     * @return true if inputstream is a jar
+     */
+    public static boolean isJar(File f) {
+        try {
+            JarInputStream jis = new JarInputStream(new FileInputStream(f));
+            if (jis.getNextEntry() != null) {
+                return true;
+            }
+        } catch (IOException ioe) {
+        }
+        return false;
     }
 }
 



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