private static String getTopic(String methodName, Object subscriber, Method method) {
       try {
           Method runtimeEvalMethod = subscriber.getClass().getMethod(methodName, new Class[0]);
           //necessary in case the method does not have public access or if the class it belongs
           //to isn't public
           runtimeEvalMethod.setAccessible(true);
           return runtimeEvalMethod.invoke(subscriber, new Object[0]).toString();
       } catch (SecurityException e) {
           throw new RuntimeException("Could not retrieve method for subscription. Method: " + methodName, e);
       } catch (NoSuchMethodException e) {
           throw new RuntimeException("Could not retrieve method for subscription. Method: " + methodName, e);
       } catch (InvocationTargetException e) {
           e.getTargetException().printStackTrace();
           throw new RuntimeException("Could not invoke method for subscription. Method: " + methodName, e);
       } catch (IllegalAccessException e) {
           throw new RuntimeException("Could not invoke method for subscription. Method: " + methodName, e);
       }
   }