Object[] (Object[] params) { if (params == null || params.length == 0) { return params; } final Object[] unwrappedParams = new Object[params.length]; for (int idx = 0; idx < params.length; idx++) { Object param = params[idx]; if (param != null && Proxy.isProxyClass(param.getClass())) { final InvocationHandler invocationHandler = Proxy.getInvocationHandler(param); if (invocationHandler instanceof ProxyDelegateAccessor) { param = ((ProxyDelegateAccessor)invocationHandler).getDelegate(); } } unwrappedParams[idx] = param; } return unwrappedParams; }