private <T> T getObjectTranslation( Object source, Class<? extends TranslationTargetFactory> factoryType, Class<T> destinationClass ) {
ObjectTranslator<T> translator = getTranslator( destinationClass );
TranslationTargetFactory factory = getTranslationTargetFactory( factoryType );
T translated = factory.getTranslationTargetInstance( source, destinationClass );
if ( translated == null )
throw new TranslationException( "Translation target factory (" + factory + ") returned null instance; cannot translate." );
translationCache.putTranslation( source, translated );
translator.update( source, translated, this, variables );
return translated;
}