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 am...@apache.org on 2008/12/08 05:59:55 UTC

svn commit: r724259 - /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java

Author: amilas
Date: Sun Dec  7 20:59:55 2008
New Revision: 724259

URL: http://svn.apache.org/viewvc?rev=724259&view=rev
Log:
Applied the patch AXIS2-4004

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java?rev=724259&r1=724258&r2=724259&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java Sun Dec  7 20:59:55 2008
@@ -21,38 +21,28 @@
 
 import org.apache.axis2.AxisFault;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
 public class DefaultObjectSupplier implements ObjectSupplier {
 
-    public Object getObject(Class clazz) throws AxisFault {
-        try {
-            return clazz.newInstance();
-        } catch (Exception exception) {
-            String className = clazz.getName();
-            // if this is an inner class then that can be a non static inner class. those classes have to be instanciate
-            // in a different way than a normal initialization
-            if (className.indexOf("$") > 0) {
-                String outerClassName = className.substring(0, className.indexOf("$"));
-                try {
-                    Class outerClass = Class.forName(outerClassName);
-                    Object outerClassObject = outerClass.newInstance();
-                    Constructor innterClassConstructor = clazz.getConstructor(new Class[]{outerClass});
-                    return innterClassConstructor.newInstance(new Object[]{outerClassObject});
-                } catch (ClassNotFoundException e) {
-                    throw AxisFault.makeFault(e);
-                } catch (IllegalAccessException e) {
-                    throw AxisFault.makeFault(e);
-                } catch (InstantiationException e) {
-                    throw AxisFault.makeFault(e);
-                } catch (NoSuchMethodException e) {
-                    throw AxisFault.makeFault(e);
-                } catch (InvocationTargetException e) {
-                    throw AxisFault.makeFault(e);
-                }
-            }
-            throw AxisFault.makeFault(exception);
-        }
-    }
+	/* (non-Javadoc)
+	 * @see org.apache.axis2.engine.ObjectSupplier#getObject(java.lang.Class)
+	 */
+	public Object getObject(Class clazz) throws AxisFault {
+		try {
+			Class parent = clazz.getDeclaringClass();
+			Object instance = null;
+
+			if (parent != null) {
+				// if this is an inner class then that can be a non static inner class. 
+				// those classes have to be instantiated in a different way than a normal initialization.
+				instance = clazz.getConstructor(new Class[] { parent })
+						.newInstance(new Object[] { getObject(parent) });
+			} else {
+				instance = clazz.newInstance();
+			}
+
+			return instance;
+		} catch (Exception e) {
+			throw AxisFault.makeFault(e);
+		}
+	}
 }