/** {@inheritDoc} */
 @Override
 public Response<?> extendedOperation(final ExtendedRequest request) throws LdapException {
   Response<?> response = null;
   try {
     final LDAPExtendedResponse ldapExtRes =
         connection.extendedOperation(
             new LDAPExtendedOperation(request.getOID(), request.encode()),
             getLDAPConstraints(request));
     final ExtendedResponse<?> extRes =
         ExtendedResponseFactory.createExtendedResponse(
             request.getOID(), ldapExtRes.getID(), ldapExtRes.getValue());
     response = createResponse(request, extRes.getValue(), ldapExtRes);
   } catch (LDAPException e) {
     processLDAPException(e);
   }
   return response;
 }
 /** {@inheritDoc} */
 @Override
 public void messageReceived(final LDAPExtendedResponse extendedResponse) {
   logger.debug("Unsolicited notification received: {}", extendedResponse);
   synchronized (listeners) {
     final Response<Void> response = createResponse(null, null, extendedResponse);
     for (UnsolicitedNotificationListener listener : listeners) {
       listener.notificationReceived(extendedResponse.getID(), response);
     }
   }
 }