1 package net.sf.crispy.server; 2 3 import java.lang.reflect.Method; 4 5 import net.sf.crispy.ExceptionWrapper; 6 import net.sf.crispy.InterceptorHandler; 7 import net.sf.crispy.proxy.DynamicJdkProxy; 8 import net.sf.crispy.proxy.DynamicProxy; 9 import net.sf.crispy.proxy.InvocationHandler; 10 11 /** 12 * The default implementation of the <code>ServiceEndpoint</code>. 13 * 14 * @author Linke 15 * 16 * @since 1.1.0 17 * 18 */ 19 public class ServiceEndpointImpl implements ServiceEndpoint { 20 21 private InterceptorHandlerCreator interceptorHandlerCreator = null; 22 23 public void setInterceptorHandlerCreator(InterceptorHandlerCreator pvCreator) { 24 interceptorHandlerCreator = pvCreator; 25 } 26 27 public InterceptorHandlerCreator getInterceptorHandlerCreator() { 28 return interceptorHandlerCreator; 29 } 30 31 /** 32 * If don't set a <code>InterceptorHandlerCreator</code>, than create a new <code>InterceptorHandler</code> instance. 33 * 34 * @return By every call create a new <code>InterceptorHandler</code> instance. 35 */ 36 public final InterceptorHandler createNewInterceptorHandlerInstance() { 37 if (this.getInterceptorHandlerCreator() != null) { 38 return getInterceptorHandlerCreator().createNewInterceptorHandlerInstance(); 39 } else { 40 return new InterceptorHandler(); 41 } 42 } 43 44 public final Object doInvoke(Object pvServiceImpl, Method pvMethod, Object[] pvArgs, InterceptorHandler pvInterceptorHandler) { 45 Object lvResult = null; 46 47 InterceptorHandler lvInterceptorHandler = pvInterceptorHandler; 48 if (lvInterceptorHandler == null) { 49 lvInterceptorHandler = createNewInterceptorHandlerInstance(); 50 } 51 52 DynamicProxy dynamicProxy = new DynamicJdkProxy(); 53 dynamicProxy.setProxyClass(pvServiceImpl.getClass()); 54 dynamicProxy.setProxyObject(pvServiceImpl); 55 56 try { 57 lvResult = InvocationHandler.doInvoke(dynamicProxy, null, pvMethod, pvArgs, lvInterceptorHandler); 58 } catch (Exception e) { 59 lvResult = ExceptionWrapper.isThrowableThanHandleThrowable(e); 60 } 61 return lvResult; 62 } 63 64 }