public static Throwable read(cdrBufInput input, ServiceContext[] contexts)
public static Throwable read(BufferredCdrInput input, ServiceContext[] contexts)
  public static Throwable read(cdrBufInput input, ServiceContext[] contexts)  {    input.mark(Integer.MAX_VALUE);    int h = input.read_long();    if (h == 0)      {        // This block reads exception info in the Sun specific format.        // (currently we read the exception name only).        try          {            // We may need to jump back if the value is read via value            // factory.            input.mark(512);            int value_tag = input.read_long();            checkTag(value_tag);            String codebase = null;            String[] ids = null;            String id = null;            // Check for the agreed null value.            if (value_tag == vt_NULL)              return null;            else if (value_tag == vt_INDIRECTION)              return (Throwable) readIndirection(input);            else              {                // Read the value.                if ((value_tag & vf_CODEBASE) != 0)                  {                    // The codebase is present. The codebase is a space                    // separated list of URLs from where the implementing                    // code can be downloaded.                    codebase = read_string(input);                  }                if ((value_tag & vf_MULTIPLE_IDS) != 0)                  {                    // Multiple supported repository ids are present.                    ids = read_string_array(input);                  }                else if ((value_tag & vf_ID) != 0)                  {                    // Single supported repository id is present.                    id = read_string(input);                  }              }            java.lang.Object ox = createInstance(id, ids, codebase);            return (Throwable) ox;          }        catch (Exception ex)          {            ex.printStackTrace();            return null;          }      }    else      {        input.reset();        // Read as defined in OMG documentation.        return (Throwable) input.read_Value();      }  }