code: func (s *Service) RoundTrip(ctx context.Context, request, response soap.HasFault) error {
  	field := func(r soap.HasFault, name string) reflect.Value {
  		return reflect.ValueOf(r).Elem().FieldByName(name)
  	}
  
  	// Every struct passed to soap.RoundTrip has "Req" and "Res" fields
  	req := field(request, "Req")
  
  	// Every request has a "This" field.
  	this := req.Elem().FieldByName("This")
  
  	method := &Method{
  		Name: req.Elem().Type().Name(),
  		This: this.Interface().(types.ManagedObjectReference),
  		Body: req.Interface(),
  	}
  
  	res := s.call(&Context{
  		Map:     Map,
  		Context: ctx,
  		Session: internalContext.Session,
  	}, method)
  
  	if err := res.Fault(); err != nil {
  		return soap.WrapSoapFault(err)
  	}
  
  	field(response, "Res").Set(field(res, "Res"))
  
  	return nil
  }
docs: // RoundTrip implements the soap.RoundTripper interface in process.
  // Rather than encode/decode SOAP over HTTP, this implementation uses reflection.