public static Object decorate(Object delegate) throws Exception {
		if (delegate != null) {
			Field[] services = delegate.getClass().getDeclaredFields();
			for (Field service : services) {
				if (service.isAnnotationPresent(Service.class)) {
					try {
						service.setAccessible(true);
						String clzName = convertImplPackage(service.getType().getCanonicalName());
						service.set(delegate, Class.forName(clzName).newInstance());
					} catch (Exception e) {
						throw e;
					}
				}
			}
		}
		return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), new XAWrapperHandler(delegate));
	}