@SuppressWarnings({ "unchecked" }) private <T> T createHDCEnabledJaxrsClientInterceptorProxy(final T cxfProxy, final Class<T> restServiceApiClass) { return (T) new ProxyFactory().createInterceptorProxy(cxfProxy, new Interceptor() { @Override public Object intercept(Invocation invocation) throws Throwable { Task jaxrsClientTask = null; try { if (HDC.isStarted()) { jaxrsClientTask = HDC.getCurrentTask().startSubtask("RestProxyServicePlugin"); jaxrsClientTask.setAttribute("class", restServiceApiClass.getName()); jaxrsClientTask.setAttribute("method", invocation.getMethod().getName()); } return invocation.proceed(); } finally { if (jaxrsClientTask != null) { jaxrsClientTask.stop(); } } } }, new Class [] { restServiceApiClass }); } }
public static <T> T monitor(final Class<T> clazz, final Object instance) { return clazz.cast( IoCs.findOrCreateInstance(ProxyFactory.class) .createInvokerProxy(ClassLoaders.current(), new SironaPerformanceHandler(instance), new Class<?>[]{clazz})); }
/** * Stubs a type for creating a lambda. The resulting stub * <strong>must</strong> receive one and only one message. * * Not all {@link LambdaFactory}s can stub all types - ie, stubbing * interfaces, concrete classes or final classes. Their stubbing capabilities * depend on the {@link ProxyFactory} passed as constructor argument to this * {@link LambdaFactory} * * @param <A> * @param clazz * the type to stub * @return a new stub */ @EnforceRestrictions @NonNull public <A> A $(@NonNull Class<A> clazz) { STATE.that(!firstStep, "Wrong invocation order"); A stub = (A) proxyFactory.createInvokerProxy(handler, new Class[] { clazz }); firstStep = true; return stub; }