1 package org.testng.internal; 2 3 import org.testng.IObjectFactory; 4 import org.testng.TestNGException; 5 6 import java.lang.reflect.Constructor; 7 8 /** 9 * Default factory for test creation. 10 * Note that if no constructor is found matching the specified parameters, 11 * this factory will try to invoke a constructor that takes in a string object 12 * 13 * @author Hani Suleiman 14 * Date: Mar 6, 2007 15 * Time: 12:00:27 PM 16 * @since 5.6 17 */ 18 public class ObjectFactoryImpl implements IObjectFactory { 19 20 /** 21 * 22 */ 23 private static final long serialVersionUID = -4547389328475540017L; 24 25 @Override newInstance(Constructor constructor, Object... params)26 public Object newInstance(Constructor constructor, Object... params) { 27 try { 28 constructor.setAccessible(true); 29 return constructor.newInstance(params); 30 } 31 catch (IllegalAccessException ex) { 32 return ClassHelper.tryOtherConstructor(constructor.getDeclaringClass()); 33 } 34 catch (InstantiationException ex) { 35 return ClassHelper.tryOtherConstructor(constructor.getDeclaringClass()); 36 } 37 catch(Exception ex) { 38 throw new TestNGException("Cannot instantiate class " 39 + (constructor != null 40 ? constructor.getDeclaringClass().getName() 41 : ": couldn't find a suitable constructor"), 42 ex); 43 } 44 } 45 } 46