public void send_exception(ServerRequestInfo ri) {
    try {
      //
      // Test: get operation name
      //
      String op = ri.operation();

      TEST(op.equals("systemexception") || op.equals("userexception") || op.equals("deactivate"));

      boolean user = op.equals("userexception");

      //
      // If "deactivate" then we're done
      //
      if (op.equals("deactivate")) return;

      //
      // Test: Arguments should not be available
      //
      try {
        org.omg.Dynamic.Parameter[] parameters = ri.arguments();
        TEST(false);
      } catch (BAD_INV_ORDER ex) {
        // Expected
      }

      // TODO: test operation_context

      //
      // Test: result is not available
      //
      try {
        Any result = ri.result();
        TEST(false);
      } catch (BAD_INV_ORDER ex) {
        // Expected
      }

      //
      // Test: exceptions
      //
      try {
        TypeCode[] exceptions = ri.exceptions();
        if (op.equals("userexception")) {
          TEST(exceptions.length == 1);
          TEST(exceptions[0].equal(userHelper.type()));
        } else {
          TEST(exceptions.length == 0);
        }
      } catch (BAD_INV_ORDER ex) {
        TEST(false);
      } catch (NO_RESOURCES ex) {
        // Expected (if servant is DSI)
      }

      //
      // Test: response expected should be true
      //
      TEST(ri.response_expected());

      // TODO: test sync scope

      //
      // Test: reply status is available
      //
      if (user) TEST(ri.reply_status() == USER_EXCEPTION.value);
      else TEST(ri.reply_status() == SYSTEM_EXCEPTION.value);

      //
      // Test: forward reference is not available
      //
      try {
        org.omg.CORBA.Object ior = ri.forward_reference();
        TEST(false);
      } catch (BAD_INV_ORDER ex) {
        // Expected
      }

      //
      // Test: get_request_service_context
      // Test: get_reply_service_context
      //
      testServiceContext(op, ri, false);

      //
      // Test: sending exception is available
      //
      try {
        Any any = ri.sending_exception();
        if (!user) {
          SystemException ex =
              org.apache.yoko.orb.OB.Util.unmarshalSystemException(any.create_input_stream());
        } else {
          user ex = userHelper.extract(any);
        }
      } catch (BAD_INV_ORDER ex) {
        TEST(false);
      } catch (NO_RESOURCES ex) // TODO: remove this!
      {
      }

      //
      // Test: object id is correct
      //
      byte[] oid = ri.object_id();
      TEST(
          (oid.length == 4 && (new String(oid)).equals("test"))
              || (oid.length == 7 && (new String(oid)).equals("testDSI")));

      //
      // Test: adapter id is correct (this is a tough one to test)
      //
      byte[] adapterId = ri.adapter_id();
      TEST(adapterId.length != 0);

      //
      // Test: target_most_derived_interface raises BAD_INV_ORDER
      //
      try {
        String mdi = ri.target_most_derived_interface();
        TEST(false);
      } catch (BAD_INV_ORDER ex) {
        // Expected
      }

      //
      // Test: server id is correct
      //
      String serverId = ri.server_id();
      TEST(serverId.equals(""));

      //
      // Test: orb id is correct
      //
      String orbId = ri.orb_id();
      TEST(orbId.equals("myORB"));

      //
      // Test: adapter name is correct
      //
      String[] adapterName = ri.adapter_name();
      TEST(adapterName.length == 1 && adapterName[0].equals("persistent"));

      //
      // Test: target_is_a raises BAD_INV_ORDER
      //
      try {
        ri.target_is_a("IDL:TestInterface:1.0");
        TEST(false);
      } catch (BAD_INV_ORDER ex) {
        // Expected
      }

      //
      // Test: get_server_policy
      //
      Policy policy = ri.get_server_policy(MY_SERVER_POLICY_ID.value);
      MyServerPolicy myServerPolicy = MyServerPolicyHelper.narrow(policy);
      TEST(myServerPolicy != null);
      TEST(myServerPolicy.value() == 10);

      try {
        policy = ri.get_server_policy(1013);
        TEST(false);
      } catch (INV_POLICY ex) {
        // Expected
      }
    } catch (test.common.TestException ex) {
      ex.printStackTrace();
      throw ex;
    }
  }