code: @Override
      public void sync(
              final ObjectClass objClass,
              final SyncToken token,
              final SyncResultsHandler handler,
              final OperationOptions options) {
  
          // check objectclass
          if (objClass == null || (!objClass.equals(ObjectClass.ACCOUNT))) {
              throw new IllegalArgumentException("Invalid objectclass");
          }
  
          // check objectclass
          if (handler == null) {
              throw new IllegalArgumentException("Invalid handler");
          }
  
          // get web service client
          final Provisioning provisioning = connection.getProvisioning();
          if (provisioning == null) {
              throw new IllegalStateException("Web Service client not found");
          }
  
          try {
              final List<WSChange> changes = provisioning.sync();
  
              SyncDeltaBuilder sdb = null;
  
              boolean handle = true;
              for (final Iterator<WSChange> i = changes.iterator(); i.hasNext() && handle;) {
                  final WSChange change = i.next();
  
                  if (LOG.isOk()) {
                      LOG.ok("Found change {0}", change);
                  }
  
                  try {
                      sdb = buildSyncDelta(change);
                      handle = handler.handle(sdb.build());
                  } catch (Exception e) {
                      LOG.error(e, "Error building connector object for change {0}", change);
                  }
              }
          } catch (ProvisioningException e) {
              LOG.error("Synchronization failed");
  
              throw new IllegalStateException(e);
          }
      }
docs: {@inheritDoc}
  
  @param objClass
  @param options
  @param token
  @param handler