docs: private ProxyInvocationHandler createProxyInvocationHandler(final ProxyCreatedCallback<T> callback) {
          if (buildCalled) {
              throw new JoynrIllegalStateException("Proxy builder was already used to build a proxy. Please create a new proxy builder for each proxy.");
          }
          buildCalled = true;
  
          StatelessAsyncCallback statelessAsyncCallback = null;
          if (statelessAsyncCallbackUseCase != null) {
              statelessAsyncCallback = statelessAsyncCallbackDirectory.get(statelessAsyncCallbackUseCase);
              if (statelessAsyncCallback == null) {
                  throw new JoynrIllegalStateException("No stateless async callback found registered for use case "
                          + statelessAsyncCallbackUseCase);
              }
          }
  
          final ProxyInvocationHandler proxyInvocationHandler = proxyInvocationHandlerFactory.create(domains,
                                                                                                     interfaceName,
                                                                                                     proxyParticipantId,
                                                                                                     discoveryQos,
                                                                                                     messagingQos,
                                                                                                     shutdownNotifier,
                                                                                                     statelessAsyncCallback);
  
          // This order is necessary because the Arbitrator might return early
          // But if the listener is set after the ProxyInvocationHandler the
          // Arbitrator cannot return early
          arbitrator.setArbitrationListener(new ArbitrationCallback() {
              @Override
              public void onSuccess(ArbitrationResult arbitrationResult) {
                  logger.debug("DISCOVERY proxy created for:{}", arbitrationResult.getDiscoveryEntries());
                  proxyInvocationHandler.createConnector(arbitrationResult);
                  callback.onProxyCreationFinished(proxy);
              }
  
              @Override
              public void onError(Throwable throwable) {
                  JoynrRuntimeException reason;
                  if (throwable instanceof JoynrRuntimeException) {
                      reason = (JoynrRuntimeException) throwable;
                  } else {
                      reason = new JoynrRuntimeException(throwable);
                  }
                  proxyInvocationHandler.abort(reason);
                  callback.onProxyCreationError(reason);
              }
          });
  
          return proxyInvocationHandler;
      }