/**
   * * Processes the web exception.
   *
   * @param exception WebException
   * @param req HttpWebRequest
   */
  private void processWebException(Exception exception, HttpWebRequest req) {
    SoapFaultDetails soapFaultDetails = null;
    if (null != req) {
      try {
        if (500 == req.getResponseCode()) {
          if (this.service.isTraceEnabledFor(TraceFlags.AutodiscoverRequest)) {
            ByteArrayOutputStream memoryStream = new ByteArrayOutputStream();
            InputStream serviceResponseStream = AutodiscoverRequest.getResponseStream(req);
            while (true) {
              int data = serviceResponseStream.read();
              if (-1 == data) {
                break;
              } else {
                memoryStream.write(data);
              }
            }
            memoryStream.flush();
            serviceResponseStream.close();
            this.service.traceResponse(req, memoryStream);
            ByteArrayInputStream memoryStreamIn =
                new ByteArrayInputStream(memoryStream.toByteArray());
            EwsXmlReader reader = new EwsXmlReader(memoryStreamIn);
            // soapFaultDetails = this.readSoapFault(reader);
            this.readSoapFault(reader);
            memoryStream.close();
          } else {
            InputStream serviceResponseStream = AutodiscoverRequest.getResponseStream(req);
            EwsXmlReader reader = new EwsXmlReader(serviceResponseStream);
            soapFaultDetails = this.readSoapFault(reader);
            serviceResponseStream.close();

            if (soapFaultDetails != null) {
              throw new ServiceResponseException(new ServiceResponse(soapFaultDetails));
            }
          }
        } else {
          this.service.processHttpErrorResponse(req, exception);
        }
      } catch (Exception e) {
        // do nothing
        e.printStackTrace();
      }
    }
  }