public Class getElementClass() throws MappingException { if (elementClassName==null) { org.hibernate.type.Type elementType = getElement().getType(); return isPrimitiveArray() ? ( (PrimitiveType) elementType ).getPrimitiveClass() : elementType.getReturnedClass(); } else { try { return ReflectHelper.classForName(elementClassName); } catch (ClassNotFoundException cnfe) { throw new MappingException(cnfe); } } }
/** * Retrieve a constructor for the given class, with arguments matching the specified Hibernate mapping * {@link Type types}. * * @param clazz The class needing instantiation * @param types The types representing the required ctor param signature * @return The matching constructor. * @throws PropertyNotFoundException Indicates we could not locate an appropriate constructor (todo : again with PropertyNotFoundException???) */ public static Constructor getConstructor(Class clazz, Type[] types) throws PropertyNotFoundException { final Constructor[] candidates = clazz.getConstructors(); for ( int i = 0; i < candidates.length; i++ ) { final Constructor constructor = candidates[i]; final Class[] params = constructor.getParameterTypes(); if ( params.length == types.length ) { boolean found = true; for ( int j = 0; j < params.length; j++ ) { final boolean ok = params[j].isAssignableFrom( types[j].getReturnedClass() ) || ( types[j] instanceof PrimitiveType && params[j] == ( ( PrimitiveType ) types[j] ).getPrimitiveClass() ); if ( !ok ) { found = false; break; } } if ( found ) { constructor.setAccessible( true ); return constructor; } } } throw new PropertyNotFoundException( "no appropriate constructor in class: " + clazz.getName() ); }
public static Constructor getConstructor(Class clazz, Type[] types) throws PropertyNotFoundException { final Constructor[] candidates = clazz.getConstructors(); for ( int i=0; i<candidates.length; i++ ) { final Constructor constructor = candidates[i]; final Class[] params = constructor.getParameterTypes(); if ( params.length==types.length ) { boolean found = true; for ( int j=0; j<params.length; j++ ) { final boolean ok = params[j].isAssignableFrom( types[j].getReturnedClass() ) || ( types[j] instanceof PrimitiveType && params[j] == ( (PrimitiveType) types[j] ).getPrimitiveClass() ); if (!ok) { found = false; break; } } if (found) { if ( !isPublic(clazz, constructor) ) constructor.setAccessible(true); return constructor; } } } throw new PropertyNotFoundException( "no appropriate constructor in class: " + clazz.getName() ); }
private String formatMissingContructorExceptionMessage(String className) { String[] params = new String[constructorArgumentTypes.length]; for ( int j = 0; j < constructorArgumentTypes.length; j++ ) { params[j] = constructorArgumentTypes[j] instanceof PrimitiveType ? ( (PrimitiveType) constructorArgumentTypes[j] ).getPrimitiveClass().getName() : constructorArgumentTypes[j].getReturnedClass().getName(); } String formattedList = params.length == 0 ? "no arguments constructor" : StringHelper.join( ", ", params ); return String.format( "Unable to locate appropriate constructor on class [%s]. Expected arguments are: %s", className, formattedList ); }
/** * Retrieve a constructor for the given class, with arguments matching the specified Hibernate mapping * {@link Type types}. * * @param clazz The class needing instantiation * @param types The types representing the required ctor param signature * @return The matching constructor. * @throws PropertyNotFoundException Indicates we could not locate an appropriate constructor (todo : again with PropertyNotFoundException???) */ public static Constructor getConstructor(Class clazz, Type[] types) throws PropertyNotFoundException { final Constructor[] candidates = clazz.getConstructors(); for ( int i = 0; i < candidates.length; i++ ) { final Constructor constructor = candidates[i]; final Class[] params = constructor.getParameterTypes(); if ( params.length == types.length ) { boolean found = true; for ( int j = 0; j < params.length; j++ ) { final boolean ok = params[j].isAssignableFrom( types[j].getReturnedClass() ) || ( types[j] instanceof PrimitiveType && params[j] == ( ( PrimitiveType ) types[j] ).getPrimitiveClass() ); if ( !ok ) { found = false; break; } } if ( found ) { if ( !isPublic( clazz, constructor ) ) { constructor.setAccessible( true ); } return constructor; } } } throw new PropertyNotFoundException( "no appropriate constructor in class: " + clazz.getName() ); }