@SuppressWarnings("rawtypes")
	static Object wakeUp(String className, Map<String ,Object> data) {
		if (Functions.isEmpty(className)) return null;
		// find wakeup method
		if (className == null) return null;
		Class<?> c;
		try {
			 c = Class.forName(cn(className));
			 if (c == null) {
				 return null;
			 }
		} catch (Throwable e) {
			return null;
		}

		Object newObject;
		try {
			Class[] args1 = new Class[1];
            args1[0] = Map.class;
			Method m = c.getMethod("wakeUp", args1);
			Object arglist[] = new Object[1];
			arglist[0] = data;
        	newObject = m.invoke(null,arglist);
		} catch (NoSuchMethodException e) {
			return wakeUpNaked(c,data);
		} catch (IllegalAccessException e) {
			return wakeUpNaked(c,data);
		} catch (InvocationTargetException e) {
			return null;
		}
		return newObject;
	}