
001 002package ca.uhn.fhir.jpa.util; 003 004/*- 005 * #%L 006 * HAPI FHIR JPA Server 007 * %% 008 * Copyright (C) 2014 - 2022 Smile CDR, Inc. 009 * %% 010 * Licensed under the Apache License, Version 2.0 (the "License"); 011 * you may not use this file except in compliance with the License. 012 * You may obtain a copy of the License at 013 * 014 * http://www.apache.org/licenses/LICENSE-2.0 015 * 016 * Unless required by applicable law or agreed to in writing, software 017 * distributed under the License is distributed on an "AS IS" BASIS, 018 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 019 * See the License for the specific language governing permissions and 020 * limitations under the License. 021 * #L% 022 */ 023 024import org.springframework.aop.framework.Advised; 025import org.springframework.aop.support.AopUtils; 026 027/** 028 * Utility to get the Spring proxy object's target object 029 */ 030public class SpringObjectCaster { 031 032 /** 033 * Retrieve the Spring proxy object's target object 034 * @param proxy 035 * @param clazz 036 * @param <T> 037 * @return 038 * @throws Exception 039 */ 040 public static <T> T getTargetObject(Object proxy, Class<T> clazz) throws Exception { 041 while( (AopUtils.isJdkDynamicProxy(proxy))) { 042 return clazz.cast(getTargetObject(((Advised)proxy).getTargetSource().getTarget(), clazz)); 043 } 044 045 return clazz.cast(proxy); 046 } 047}