code: public Schema handle(int version, Route route, Properties parms, String post_body) throws Exception {
      Class<? extends Schema> handler_schema_class = getHandlerMethodInputSchema(route._handler_method);
      Schema schema = Schema.newInstance(handler_schema_class);
  
      // If the schema has a real backing class fill from it to get the default field values:
      Class<? extends Iced> iced_class = schema.getImplClass();
      if (iced_class != Iced.class) {
        Iced defaults = schema.createImpl();
        schema.fillFromImpl(defaults);
      }
  
      boolean has_body = (null != post_body);
  
      // Fill from http request params:
      schema = schema.fillFromParms(parms, !has_body);
      if (schema == null)
        throw H2O.fail("fillFromParms returned a null schema for version: " + version + " in: " + this.getClass() + " with params: " + parms);
  
      //Fill from JSON body, if there is one.  NOTE: there should *either* be a JSON body *or* parms,
      //with the exception of control-type query parameters.
      if (has_body) {
        schema = schema.fillFromBody(post_body);
      }
  
      // NOTE! The handler method is free to modify the input schema and hand it back.
      Schema result = null;
      try {
        route._handler_method.setAccessible(true);
        result = (Schema)route._handler_method.invoke(this, version, schema);
      }
      // Exception thrown out of the invoked method turn into InvocationTargetException
      // rather uselessly.  Peel out the original exception & throw it.
      catch( InvocationTargetException ite ) {
        Throwable t = ite.getCause();
        if( t instanceof RuntimeException ) throw (RuntimeException)t;
        if( t instanceof Error ) throw (Error)t;
        throw new RuntimeException(t);
      }
  
      // Version-specific unwind from the Iced back into the Schema
      return result;
    }
docs: Invoke the handler with parameters.  Can throw any exception the called handler can throw.