public abstract void invoke(ServerRequest request);
public void invoke(ServerRequest request) { Request r = _request(request.operation());   NVList args = new gnuNVList(); request.arguments(args); NamedValue v; int i = 0;  try {  for (i = 0; i < args.count(); i++) { v = args.item(i); Any n; OutputStream out;  switch (v.flags()) { case ARG_IN.value: out = v.value().create_output_stream(); v.value().write_value(out); n = r.add_named_in_arg(v.name()); n.read_value(out.create_input_stream(), v.value().type()); break; case ARG_INOUT.value: out = v.value().create_output_stream(); v.value().write_value(out); n = r.add_named_inout_arg(v.name()); n.read_value(out.create_input_stream(), v.value().type()); break; case ARG_OUT.value: r.add_named_out_arg(v.name()); break;  default: throw new InternalError("Invalid flags " + v.flags()); } } } catch (Bounds b) { throw new Unexpected(args.count() + "[" + i + "]", b); }   r.ctx(request.ctx());     gnuAny g = new gnuAny(); request.result(g); r.set_return_type(g.type());   r.invoke();   NVList r_args = r.arguments();  try {     for (i = 0; i < args.count(); i++) { v = args.item(i);  if (v.flags() == ARG_OUT.value || v.flags() == ARG_INOUT.value) { OutputStream out = r_args.item(i).value().create_output_stream(); r_args.item(i).value().write_value(out); v.value().read_value(out.create_input_stream(), v.value().type()); } } } catch (Bounds b) { throw new Unexpected(args.count() + "[" + i + "]", b); }   NamedValue returns = r.result(); if (returns != null) request.set_result(returns.value()); }
  public abstract void invoke(ServerRequest request);