/**
   * @param string $url
   * @param string $username
   * @param string $password
   * @throws NuxeoClientException
   */
  public function __construct($url = 'http://localhost:8080/nuxeo', $username = '******', $password = '******') {
    try {
      $this->baseUrl = Url::factory($url);
      $this->httpClient = new Client($url, array(
        Client::REQUEST_OPTIONS => array(
          'headers' => array(
            'Content-Type' => 'application/json+nxrequest'
          )
        )
      ));
    } catch(GuzzleException $ex) {
      throw NuxeoClientException::fromPrevious($ex);
    }

    $this->httpClient->setRequestFactory(new RequestFactory());

    $self = $this;

    /**
     * @param RequestInterface $request
     */
    $this->interceptors[] = function($request) use ($self, $username, $password) {
      try {
        $request->setAuth($username, $password);
      } catch(GuzzleException $ex) {
        throw NuxeoClientException::fromPrevious($ex);
      }
    };

  }
 /**
  * {@inheritdoc}
  */
 public function createHttpClient()
 {
     $guzzleClient = new Client();
     $guzzleClient->setRequestFactory($this->getRequestFactory());
     $event = new GenericEvent($guzzleClient);
     $this->getEventDispatcher()->dispatch('client.created', $event);
     $client = new HttpClient($guzzleClient);
     return $client;
 }