@Override
 public <TAggregate extends AggregateRoot, TEvent extends AggregateDomainEvent<TAggregate>>
     Future<TAggregate> submit(final TEvent domainEvent, final String uri) {
   if (uri == null) throw new IllegalArgumentException("uri can't be null.");
   final Class<?> eventClazz = domainEvent.getClass();
   @SuppressWarnings("unchecked")
   final Class<TAggregate> manifest = (Class<TAggregate>) eventClazz.getEnclosingClass();
   final String domainName = client.getDslName(manifest);
   return client.sendRequest(
       manifest,
       DOMAIN_URI
           + "submit/"
           + domainName
           + "/"
           + eventClazz.getSimpleName()
           + "?uri="
           + encode(uri),
       "POST",
       domainEvent,
       new int[] {201});
 }
 @Override
 public <TEvent extends DomainEvent> Future<String> submit(final TEvent domainEvent) {
   final String domainName = client.getDslName(domainEvent.getClass());
   return client.sendRequest(
       String.class, DOMAIN_URI + "submit/" + domainName, "POST", domainEvent, new int[] {201});
 }