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/09/02 08:07:08 UTC
svn commit: r691112 -
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DefaultObjectSupplier.java
Author: amilas
Date: Mon Sep 1 23:07:07 2008
New Revision: 691112
URL: http://svn.apache.org/viewvc?rev=691112&view=rev
Log:
fixed Axis2 4004. Instantiate not static inner classes
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=691112&r1=691111&r2=691112&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 Mon Sep 1 23:07:07 2008
@@ -21,13 +21,38 @@
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 e) {
- throw AxisFault.makeFault(e);
+ } 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);
}
}
}