Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * This software is licensed under the Apache License, Version 2.0
   * (the "License") agreement; you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.force66.beantester.utils;
 
 import java.util.List;
 
 
Helper for class instantiation

Author(s):
D. Ashmore
 
 public class InstantiationUtils {
 	
 	public static Object safeNewInstance(Class<?> klass) {
 		return safeNewInstance(klassnull);
 	}
 	
 	public static Object safeNewInstance(ValueGeneratorFactory factoryClass<?> klass) {
 		Validate.notNull(klass"Null class not allowed.");
 		Constructor<?> ctor = findPublicConstructor(klass);
 		if (ctor == null) {
 			throw new BeanTesterException("No public constructor found -- value generation isn't possible")
 				.addContextValue("class"klass.getName());
 		}
 		if (ctor.getParameterTypes().length == 0) {
 			return safeNewInstance(klassnull);
 		}
 		
 		ValueGenerator<?> generator = null;
 		List<ObjectconstructorArgs = new ArrayList<Object>();
 		for (Class<?> argTypector.getParameterTypes()) {
 			generator = factory.forClass(argType);
 			if (generator == null) {
 				throw new BeanTesterException("Value can't be generated for constructor argument")
 					.addContextValue("class"klass.getName())
 					.addContextValue("constructor"ctor)
 					.addContextValue("argument type"argType.getName());
 			}
 			constructorArgs.add(generator.makeValues()[0]);
 		}
 		
 		return safeNewInstance(klassconstructorArgs.toArray());
 	}
 	
 	public static Constructor<?> findPublicConstructor(Class<?> klass) {
 		Validate.notNull(klass"Null class not allowed.");
 		Constructor<?> nullConstructor = ConstructorUtils.getAccessibleConstructor(klassnew Class<?>[0]);
 		if (nullConstructor != null) {
 			return nullConstructor;
 		}
 		
 		Constructor<?>[] constructorArray = klass.getConstructors();
 		for (Constructor<?> constructorconstructorArray) {
 			if (Modifier.isPublic(constructor.getModifiers())) {
 				return constructor;
 			}
 		}
 		
 		return null;
 	}

newInstance() execution properly wrapped with exception handling.

Parameters:
klass
Returns:
 
 	public static Object safeNewInstance(Class<?> klassObject[] constructorArgs) {
 		Validate.notNull(klass"Null class not allowed.");
 		try {
 			return ConstructorUtils.invokeConstructor(klassconstructorArgs);
 		} catch (Exception e) {
 			throw new BeanTesterException("Failed to instantiate bean using newInstance()"e)
 				.addContextValue("className"klass.getName());
 		} 
 	}
		try {
			return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
			throw new BeanTesterException("This shouldn't happen"e);
		}
	}
New to GrepCode? Check out our FAQ X