[jboss-cvs] JBossAS SVN: r98967 - projects/jboss-jca/trunk/fungal/src/main/java/org/jboss/jca/fungal/impl.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sun Jan 3 08:48:39 EST 2010
Author: jesper.pedersen
Date: 2010-01-03 08:48:39 -0500 (Sun, 03 Jan 2010)
New Revision: 98967
Modified:
projects/jboss-jca/trunk/fungal/src/main/java/org/jboss/jca/fungal/impl/DeploymentDeployer.java
Log:
Support plain constructor parameters
Modified: projects/jboss-jca/trunk/fungal/src/main/java/org/jboss/jca/fungal/impl/DeploymentDeployer.java
===================================================================
--- projects/jboss-jca/trunk/fungal/src/main/java/org/jboss/jca/fungal/impl/DeploymentDeployer.java 2010-01-02 20:11:47 UTC (rev 98966)
+++ projects/jboss-jca/trunk/fungal/src/main/java/org/jboss/jca/fungal/impl/DeploymentDeployer.java 2010-01-03 13:48:39 UTC (rev 98967)
@@ -42,6 +42,7 @@
import org.jboss.jca.fungal.deployment.Unmarshaller;
import org.jboss.jca.fungal.deployment.ValueType;
+import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
@@ -359,7 +360,7 @@
Class<?> clz = null;
Object instance = null;
- if (bt.getClazz() != null)
+ if (bt.getClazz() != null && bt.getConstructor() == null)
{
clz = Class.forName(bt.getClazz(), true, cl);
instance = clz.newInstance();
@@ -383,21 +384,22 @@
}
else
{
- Class factoryClass = Class.forName(ct.getFactoryClass(), true, cl);
- Method[] factoryMethods = factoryClass.getMethods();
-
- List<Method> candidates = new ArrayList<Method>();
+ if (bt.getClazz() != null)
+ {
+ clz = Class.forName(bt.getClazz(), true, cl);
+ Constructor[] constructors = clz.getConstructors();
+ Constructor constructor = null;
- for (Method m : factoryMethods)
- {
- if (ct.getFactoryMethod().equals(m.getName()))
+ List<Constructor> candidates = new ArrayList<Constructor>();
+
+ for (Constructor c : constructors)
{
- if (ct.getParameter().size() == m.getParameterTypes().length)
+ if (ct.getParameter().size() == c.getParameterTypes().length)
{
boolean include = true;
- for (int i = 0; include && i < m.getParameterTypes().length; i++)
+ for (int i = 0; include && i < c.getParameterTypes().length; i++)
{
- Class<?> parameterClass = m.getParameterTypes()[i];
+ Class<?> parameterClass = c.getParameterTypes()[i];
if (!(parameterClass.equals(String.class) ||
parameterClass.equals(byte.class) || parameterClass.equals(Byte.class) ||
@@ -415,53 +417,133 @@
}
if (include)
- candidates.add(m);
+ candidates.add(c);
}
}
- }
- if (candidates.size() == 1)
- {
- factoryMethod = candidates.get(0);
- args = new Object[ct.getParameter().size()];
- for (int i = 0; i < ct.getParameter().size(); i++)
+ if (candidates.size() == 1)
{
- args[i] = getValue(ct.getParameter().get(i).getValue(),
- factoryMethod.getParameterTypes()[i],
- cl);
+ constructor = candidates.get(0);
+ args = new Object[ct.getParameter().size()];
+ for (int i = 0; i < ct.getParameter().size(); i++)
+ {
+ args[i] = getValue(ct.getParameter().get(i).getValue(),
+ constructor.getParameterTypes()[i],
+ cl);
+ }
}
+ else
+ {
+ boolean found = false;
+ Iterator<Constructor> it = candidates.iterator();
+ while (!found && it.hasNext())
+ {
+ try
+ {
+ Constructor c = it.next();
+ args = new Object[ct.getParameter().size()];
+
+ for (int i = 0; i < ct.getParameter().size(); i++)
+ {
+ args[i] = getValue(ct.getParameter().get(i).getValue(),
+ c.getParameterTypes()[i],
+ cl);
+ }
+
+ constructor = c;
+ found = true;
+ }
+ catch (Throwable t)
+ {
+ // ok - not this one...
+ }
+ }
+ }
+
+ instance = constructor.newInstance(args);
}
else
{
- boolean found = false;
- Iterator<Method> it = candidates.iterator();
- while (!found && it.hasNext())
+ Class factoryClass = Class.forName(ct.getFactoryClass(), true, cl);
+ Method[] factoryMethods = factoryClass.getMethods();
+
+ List<Method> candidates = new ArrayList<Method>();
+
+ for (Method m : factoryMethods)
{
- try
+ if (ct.getFactoryMethod().equals(m.getName()))
{
- Method m = it.next();
- args = new Object[ct.getParameter().size()];
+ if (ct.getParameter().size() == m.getParameterTypes().length)
+ {
+ boolean include = true;
+ for (int i = 0; include && i < m.getParameterTypes().length; i++)
+ {
+ Class<?> parameterClass = m.getParameterTypes()[i];
- for (int i = 0; i < ct.getParameter().size(); i++)
- {
- args[i] = getValue(ct.getParameter().get(i).getValue(),
- factoryMethod.getParameterTypes()[i],
- cl);
+ if (!(parameterClass.equals(String.class) ||
+ parameterClass.equals(byte.class) || parameterClass.equals(Byte.class) ||
+ parameterClass.equals(short.class) || parameterClass.equals(Short.class) ||
+ parameterClass.equals(int.class) || parameterClass.equals(Integer.class) ||
+ parameterClass.equals(long.class) || parameterClass.equals(Long.class) ||
+ parameterClass.equals(float.class) || parameterClass.equals(Float.class) ||
+ parameterClass.equals(double.class) || parameterClass.equals(Double.class) ||
+ parameterClass.equals(boolean.class) || parameterClass.equals(Boolean.class) ||
+ parameterClass.equals(char.class) || parameterClass.equals(Character.class) ||
+ parameterClass.equals(InetAddress.class)))
+ {
+ include = false;
+ }
+ }
+
+ if (include)
+ candidates.add(m);
}
+ }
+ }
- factoryMethod = m;
- found = true;
+ if (candidates.size() == 1)
+ {
+ factoryMethod = candidates.get(0);
+ args = new Object[ct.getParameter().size()];
+ for (int i = 0; i < ct.getParameter().size(); i++)
+ {
+ args[i] = getValue(ct.getParameter().get(i).getValue(),
+ factoryMethod.getParameterTypes()[i],
+ cl);
}
- catch (Throwable t)
+ }
+ else
+ {
+ boolean found = false;
+ Iterator<Method> it = candidates.iterator();
+ while (!found && it.hasNext())
{
- // ok - not this one...
+ try
+ {
+ Method m = it.next();
+ args = new Object[ct.getParameter().size()];
+
+ for (int i = 0; i < ct.getParameter().size(); i++)
+ {
+ args[i] = getValue(ct.getParameter().get(i).getValue(),
+ factoryMethod.getParameterTypes()[i],
+ cl);
+ }
+
+ factoryMethod = m;
+ found = true;
+ }
+ catch (Throwable t)
+ {
+ // ok - not this one...
+ }
}
}
+
+ instance = factoryMethod.invoke(factoryObject, args);
+ clz = instance.getClass();
}
}
-
- instance = factoryMethod.invoke(factoryObject, args);
- clz = instance.getClass();
}
if (bt.getProperty() != null)
More information about the jboss-cvs-commits
mailing list