/** See RequestInfoImpl for javadoc. */
  public String[] operation_context() {
    checkAccess(MID_OPERATION_CONTEXT);

    if (cachedOperationContext == null) {
      if (request == null) {
        throw stdWrapper.piOperationNotSupported4();
      }

      // Get the list of contexts from DII request data, If there are
      // no contexts then this method will return null.
      Context ctx = request.ctx();
      // _REVISIT_ The API for get_values is not compliant with the spec,
      // Revisit this code once it's fixed.
      // _REVISIT_ Our ORB doesn't support Operation Context, This code
      // will not be excerscised until it's supported.
      // The first parameter in get_values is the start_scope which
      // if blank makes it as a global scope.
      // The second parameter is op_flags which is set to RESTRICT_SCOPE
      // As there is only one defined in the spec.
      // The Third param is the pattern which is '*' requiring it to
      // get all the contexts.
      NVList nvList = ctx.get_values("", CTX_RESTRICT_SCOPE.value, "*");
      String[] context = new String[(nvList.count() * 2)];
      if ((nvList != null) && (nvList.count() != 0)) {
        // The String[] array will contain Name and Value for each
        // context and hence double the size in the array.
        int index = 0;
        for (int i = 0; i < nvList.count(); i++) {
          NamedValue nv;
          try {
            nv = nvList.item(i);
          } catch (Exception e) {
            return (String[]) null;
          }
          context[index] = nv.name();
          index++;
          context[index] = nv.value().extract_string();
          index++;
        }
      }

      cachedOperationContext = context;
    }

    // Good citizen: In the interest of efficiency, we assume
    // interceptors will be "good citizens" in that they will not
    // modify the contents of the String[] array.

    return cachedOperationContext;
  }
  /** See RequestInfoImpl for javadoc. */
  public Any result() {
    checkAccess(MID_RESULT);

    if (cachedResult == null) {
      if (request == null) {
        throw stdWrapper.piOperationNotSupported5();
      }
      // Get the result from the DII request data.
      NamedValue nvResult = request.result();

      if (nvResult == null) {
        throw wrapper.piDiiResultIsNull();
      }

      cachedResult = nvResult.value();
    }

    // Good citizen: In the interest of efficiency, we assume that
    // interceptors will not modify the contents of the result Any.
    // Otherwise, we would need to create a deep copy of the Any.

    return cachedResult;
  }