Author: veithen
Date: Mon Mar 29 23:43:21 2010
New Revision: 928941

URL: http://svn.apache.org/viewvc?rev=928941&view=rev
Log:
Eliminated some duplicate code originally introduced in r439555 and that has 
grown over time.

Modified:
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java

Modified: 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=928941&r1=928940&r2=928941&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
 Mon Mar 29 23:43:21 2010
@@ -62,9 +62,7 @@ import javax.xml.namespace.QName;
 import javax.xml.stream.FactoryConfigurationError;
 import javax.xml.stream.XMLStreamException;
 import java.io.*;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -429,60 +427,11 @@ public class Utils {
     public static void fillAxisService(final AxisService axisService,
                                        AxisConfiguration axisConfig, 
ArrayList<String> excludeOperations,
                                        ArrayList<String> nonRpcMethods) throws 
Exception {
-        String serviceClass;
-        Parameter implInfoParam = axisService
-                .getParameter(Constants.SERVICE_CLASS);
-        ClassLoader serviceClassLoader = axisService.getClassLoader();
-
-        if (implInfoParam != null) {
-            serviceClass = (String)implInfoParam.getValue();
-        } else {
-            // if Service_Class is null, every AbstractMR will look for
-            // ServiceObjectSupplier. This is user specific and may contain
-            // other looks.
-            implInfoParam = axisService
-                    .getParameter(Constants.SERVICE_OBJECT_SUPPLIER);
-            if (implInfoParam != null) {
-                String className = ((String)implInfoParam.getValue()).trim();
-                final Class serviceObjectMaker = Loader.loadClass(
-                        serviceClassLoader, className);
-                if (serviceObjectMaker.getModifiers() != Modifier.PUBLIC) {
-                    throw new AxisFault("Service class " + className
-                                        + " must have public as access 
Modifier");
-                }
-
-                // Find static getServiceObject() method, call it if there
-                final Method method = 
(Method)org.apache.axis2.java.security.AccessController
-                        .doPrivileged(new PrivilegedExceptionAction() {
-                            public Object run() throws NoSuchMethodException {
-                                return serviceObjectMaker.getMethod(
-                                        "getServiceObject",
-                                        AxisService.class);
-                            }
-                        });
-                Object obj = null;
-                if (method != null) {
-                    obj = org.apache.axis2.java.security.AccessController
-                            .doPrivileged(new PrivilegedExceptionAction() {
-                                public Object run()
-                                        throws InstantiationException,
-                                        IllegalAccessException,
-                                        InvocationTargetException {
-                                    return 
method.invoke(serviceObjectMaker.newInstance(),
-                                                         axisService);
-                                }
-                            });
-                }
-                if (obj == null) {
-                    log.warn("ServiceObjectSupplier implmentation Object could 
not be found");
-                    throw new DeploymentException(
-                            "ServiceClass or ServiceObjectSupplier 
implmentation Object could not be found");
-                }
-                serviceClass = obj.getClass().getName();
-            } else {
-                return;
-            }
+        Class<?> serviceClass = 
org.apache.axis2.util.Utils.getServiceClass(axisService);
+        if (serviceClass == null) {
+            return;
         }
+        ClassLoader serviceClassLoader = axisService.getClassLoader();
         // adding name spaces
         NamespaceMap map = new NamespaceMap();
         map.put(Java2WSDLConstants.AXIS2_NAMESPACE_PREFIX,
@@ -495,14 +444,14 @@ public class Utils {
                 .getParameter(Java2WSDLConstants.DOC_LIT_BARE_PARAMETER);
         if (generateBare != null && "true".equals(generateBare.getValue())) {
             schemaGenerator = new DocLitBareSchemaGenerator(serviceClassLoader,
-                                                            
serviceClass.trim(),
+                                                            
serviceClass.getName(),
                                                             
axisService.getSchemaTargetNamespace(),
                                                             axisService
                                                                     
.getSchemaTargetNamespacePrefix(),
                                                             axisService);
         } else {
             schemaGenerator = new DefaultSchemaGenerator(serviceClassLoader,
-                                                         serviceClass.trim(),
+                                                         
serviceClass.getName(),
                                                          
axisService.getSchemaTargetNamespace(),
                                                          axisService
                                                                  
.getSchemaTargetNamespacePrefix(),

Modified: 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java?rev=928941&r1=928940&r2=928941&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
 Mon Mar 29 23:43:21 2010
@@ -34,25 +34,21 @@ import org.apache.axis2.context.MessageC
 import org.apache.axis2.context.ServiceContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.InOnlyAxisOperation;
-import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.WSDL2Constants;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.DependencyManager;
 import org.apache.axis2.engine.MessageReceiver;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.util.JavaUtils;
-import org.apache.axis2.util.Loader;
 import org.apache.axis2.util.MessageContextBuilder;
+import org.apache.axis2.util.Utils;
 import org.apache.axis2.wsdl.WSDLUtil;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
 
 public abstract class AbstractMessageReceiver implements MessageReceiver {
     protected static final Log log = 
LogFactory.getLog(AbstractMessageReceiver.class);
@@ -214,55 +210,12 @@ public abstract class AbstractMessageRec
      * @throws AxisFault
      */
     protected Object makeNewServiceObject(MessageContext msgContext) throws 
AxisFault {
-        try {
-            final AxisService service = msgContext.getAxisService();
-            ClassLoader classLoader = service.getClassLoader();
-
-            // allow alternative definition of makeNewServiceObject
-            if (service.getParameter(Constants.SERVICE_OBJECT_SUPPLIER) != 
null) {
-                Parameter serviceObjectParam =
-                        
service.getParameter(Constants.SERVICE_OBJECT_SUPPLIER);
-                final Class serviceObjectMaker = Loader.loadClass(classLoader, 
((String)
-                        serviceObjectParam.getValue()).trim());
-
-                // Find static getServiceObject() method, call it if there
-                final Method method = (Method) 
org.apache.axis2.java.security.AccessController.doPrivileged(
-                        new PrivilegedExceptionAction() {
-                            public Object run() throws NoSuchMethodException {
-                                return 
serviceObjectMaker.getMethod("getServiceObject",
-                                        new Class[]{AxisService.class});
-                            }
-                        }
-                );
-                if (method != null) {
-                    return 
org.apache.axis2.java.security.AccessController.doPrivileged(
-                            new PrivilegedExceptionAction() {
-                                public Object run() throws 
InvocationTargetException, IllegalAccessException, InstantiationException {
-                                    return 
method.invoke(serviceObjectMaker.newInstance(), new Object[]{service});
-                                }
-                            }
-                    );
-                }
-            }
-
-            Parameter implInfoParam = 
service.getParameter(Constants.SERVICE_CLASS);
-            if (implInfoParam != null) {
-                final Class implClass = Loader.loadClass(
-                        classLoader,
-                        ((String) implInfoParam.getValue()).trim());
-                return 
org.apache.axis2.java.security.AccessController.doPrivileged(
-                        new PrivilegedExceptionAction() {
-                            public Object run() throws InstantiationException, 
IllegalAccessException {
-                                return implClass.newInstance();
-                            }
-                        }
-                );
-            } else {
-                throw new AxisFault(
-                        Messages.getMessage("paramIsNotSpecified", 
"SERVICE_OBJECT_SUPPLIER"));
-            }
-        } catch (Exception e) {
-            throw AxisFault.makeFault(e);
+        Object serviceObject = 
Utils.createServiceObject(msgContext.getAxisService());
+        if (serviceObject == null) {
+            throw new AxisFault(
+                    Messages.getMessage("paramIsNotSpecified", 
"SERVICE_OBJECT_SUPPLIER"));
+        } else {
+            return serviceObject;
         }
     }
 

Modified: 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java?rev=928941&r1=928940&r2=928941&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java 
(original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java 
Mon Mar 29 23:43:21 2010
@@ -59,11 +59,14 @@ import javax.xml.namespace.QName;
 import java.io.File;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedExceptionAction;
 import java.text.ParseException;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Enumeration;
 import java.util.Map;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.SocketException;
 import java.net.NetworkInterface;
 import java.net.InetAddress;
@@ -649,4 +652,104 @@ public class Utils {
         int index = uri.indexOf(':');
         return index > 0 ? uri.substring(0, index) : null;
     }
+    
+    /**
+     * Create a service object for a given service. The method first looks for
+     * the {...@link Constants#SERVICE_OBJECT_SUPPLIER} service parameter and 
if
+     * this parameter is present, it will use the specified class to create the
+     * service object. If the parameter is not present, it will create an
+     * instance of the class specified by the {...@link 
Constants#SERVICE_CLASS}
+     * parameter.
+     * 
+     * @param service
+     *            the service
+     * @return The service object or <code>null</code> if neither the
+     *         {...@link Constants#SERVICE_OBJECT_SUPPLIER} nor the
+     *         {...@link Constants#SERVICE_CLASS} parameter was found on the
+     *         service, i.e. if the service doesn't specify how to create a
+     *         service object. If the return value is non null, it will always
+     *         be a newly created instance.
+     * @throws AxisFault
+     *             if an error occurred while attempting to instantiate the
+     *             service object
+     */
+    public static Object createServiceObject(final AxisService service) throws 
AxisFault {
+        try {
+            ClassLoader classLoader = service.getClassLoader();
+
+            // allow alternative definition of makeNewServiceObject
+            Parameter serviceObjectSupplierParam =
+                    service.getParameter(Constants.SERVICE_OBJECT_SUPPLIER);
+            if (serviceObjectSupplierParam != null) {
+                final Class<?> serviceObjectMaker = 
Loader.loadClass(classLoader, ((String)
+                        serviceObjectSupplierParam.getValue()).trim());
+
+                // Find static getServiceObject() method, call it if there
+                final Method method = 
org.apache.axis2.java.security.AccessController.doPrivileged(
+                        new PrivilegedExceptionAction<Method>() {
+                            public Method run() throws NoSuchMethodException {
+                                return 
serviceObjectMaker.getMethod("getServiceObject",
+                                        AxisService.class);
+                            }
+                        }
+                );
+                return 
org.apache.axis2.java.security.AccessController.doPrivileged(
+                        new PrivilegedExceptionAction<Object>() {
+                            public Object run() throws 
InvocationTargetException, IllegalAccessException, InstantiationException {
+                                return 
method.invoke(serviceObjectMaker.newInstance(), new Object[]{service});
+                            }
+                        }
+                );
+            } else {
+                Parameter serviceClassParam = 
service.getParameter(Constants.SERVICE_CLASS);
+                if (serviceClassParam != null) {
+                    final Class<?> serviceClass = Loader.loadClass(
+                            classLoader,
+                            ((String) serviceClassParam.getValue()).trim());
+                    return 
org.apache.axis2.java.security.AccessController.doPrivileged(
+                            new PrivilegedExceptionAction<Object>() {
+                                public Object run() throws 
InstantiationException, IllegalAccessException {
+                                    return serviceClass.newInstance();
+                                }
+                            }
+                    );
+                } else {
+                    return null;
+                }
+            }
+        } catch (Exception e) {
+            throw AxisFault.makeFault(e);
+        }
+    }
+    
+    /**
+     * Get the service class for a given service. This method will first check
+     * the {...@link Constants#SERVICE_CLASS} service parameter and if that
+     * parameter is not present, inspect the instance returned by the service
+     * object supplier specified by {...@link 
Constants#SERVICE_OBJECT_SUPPLIER}.
+     * 
+     * @param service
+     *            the service
+     * @return The service class or <code>null</code> if neither the
+     *         {...@link Constants#SERVICE_CLASS} nor the
+     *         {...@link Constants#SERVICE_OBJECT_SUPPLIER} parameter was 
found on
+     *         the service, i.e. if the service doesn't specify a service 
class.
+     * @throws AxisFault
+     *             if an error occurred while attempting to load the service
+     *             class or to instantiate the service object
+     */
+    public static Class<?> getServiceClass(AxisService service) throws 
AxisFault {
+        Parameter serviceClassParam = 
service.getParameter(Constants.SERVICE_CLASS);
+        if (serviceClassParam != null) {
+            try {
+                return Loader.loadClass(service.getClassLoader(),
+                        ((String) serviceClassParam.getValue()).trim());
+            } catch (Exception e) {
+                throw AxisFault.makeFault(e);
+            }
+        } else {
+            Object serviceObject = createServiceObject(service);
+            return serviceObject == null ? null : serviceObject.getClass();
+        }
+    }
 }


Reply via email to