private static <T> T fillObject( T instance, Class<?> stopClass, TypeHandler handler ) throws Exception{

        PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors( instance );

        for(PropertyDescriptor descriptor: descriptors){
            Method setterMethod = PropertyUtils.getWriteMethod( descriptor );

            if( setterMethod != null && setterMethod.getParameters().length == 1){

                Object argument = handler.handle( descriptor.getPropertyType() );

                if( descriptor.getPropertyType().isPrimitive() && argument != null ){
                    setterMethod.invoke( instance, argument );
                }else if( descriptor.getPropertyType().isPrimitive() ){
                    //do nothing
                }else{
                    setterMethod.invoke( instance, argument );
                }


            }
        }

        return instance;

    }