1 package org.apache.ojb.broker.util; 2 3 /* Copyright 2003-2005 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 import java.lang.reflect.Constructor; 19 20 import org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException; 21 22 /** 23 * This class helps us to construct new instances. 24 * We don't want to rely on public default constructors and 25 * have to try hard to also use private or protected constructors. 26 * 27 * @author Thomas Mahler 28 * @author Lance Eason 29 * 30 * @version $Id: ConstructorHelper.java,v 1.1 2007-08-24 22:17:36 ewestfal Exp $ 31 */ 32 public class ConstructorHelper 33 { 34 /** 35 * represents a zero sized parameter array 36 */ 37 private static final Object[] NO_ARGS = {}; 38 39 /** 40 * no public constructor, please use the static method only. 41 */ 42 private ConstructorHelper() 43 { 44 } 45 46 /** 47 * create a new instance of class clazz. 48 * first use the public default constructor. 49 * If this fails also try to use protected an private constructors. 50 * @param clazz the class to instantiate 51 * @return the fresh instance of class clazz 52 * @throws InstantiationException 53 */ 54 public static Object instantiate(Class clazz) throws InstantiationException 55 { 56 Object result = null; 57 try 58 { 59 result = ClassHelper.newInstance(clazz); 60 } 61 catch(IllegalAccessException e) 62 { 63 try 64 { 65 result = ClassHelper.newInstance(clazz, true); 66 } 67 catch(Exception e1) 68 { 69 throw new ClassNotPersistenceCapableException("Can't instantiate class '" 70 + (clazz != null ? clazz.getName() : "null") 71 + "', message was: " + e1.getMessage() + ")", e1); 72 } 73 } 74 return result; 75 } 76 77 /** 78 * create a new instance of the class represented by the no-argument constructor provided 79 * @param constructor the zero argument constructor for the class 80 * @return a new instance of the class 81 * @throws InstantiationException 82 * @throws ClassNotPersistenceCapableException if the constructor is null or there is an 83 * exception while trying to create a new instance 84 */ 85 public static Object instantiate(Constructor constructor) throws InstantiationException 86 { 87 if(constructor == null) 88 { 89 throw new ClassNotPersistenceCapableException( 90 "A zero argument constructor was not provided!"); 91 } 92 93 Object result = null; 94 try 95 { 96 result = constructor.newInstance(NO_ARGS); 97 } 98 catch(InstantiationException e) 99 { 100 throw e; 101 } 102 catch(Exception e) 103 { 104 throw new ClassNotPersistenceCapableException("Can't instantiate class '" 105 + (constructor != null ? constructor.getDeclaringClass().getName() : "null") 106 + "' with given constructor: " + e.getMessage(), e); 107 } 108 return result; 109 } 110 }