code: public Object invokeStep(String remoteStepInvokerId, String stepTokenId, List<String> params) throws Exception {
          try {
              //call the remote method
              Object[] args = {remoteStepInvokerId, stepTokenId, ChorusContext.getContext().getSnapshot(), params};
              String[] signature = {"java.lang.String", "java.lang.String", "java.util.Map", "java.util.List"};
              log.debug(String.format("About to invoke step (%s) on MBean (%s)", remoteStepInvokerId, objectName));
              JmxStepResult r = (JmxStepResult) mBeanServerConnection.invoke(objectName, "invokeStep", args, signature);
  
              //update the local context with any changes made remotely
              Map newContextState = r.getChorusContext();
              ChorusContext.resetContext(newContextState);
  
              //return the result which the remote step method returned
              return r.getResult();
          } catch (MBeanException e) {
              throw e.getTargetException();
          }
      }
docs: Calls the invoke Step method on the remote MBean. The current ChorusContext will be
  serialized as part of this and marshalled to the remote bean.
  
  @param remoteStepInvokerId the id of the step to call
  @param params params to pass in the call