docs: @SuppressWarnings({ "unchecked", "rawtypes" })
      public AbstractSubscriptionPublisher create(final Object provider) {
          String interfaceClassName = ProviderAnnotations.getProvidedInterface(provider).getName();
  
          String subscriptionPublisherClassName = interfaceClassName + SubscriptionPublisher.class.getSimpleName();
          String subcriptionPublisherImplClassName = subscriptionPublisherClassName + "Impl";
          try {
  
              Class<?> subscriptionPublisherImplClass = Class.forName(subcriptionPublisherImplClassName);
              AbstractSubscriptionPublisher subscriptionPublisherImpl = (AbstractSubscriptionPublisher) subscriptionPublisherImplClass.newInstance();
              try {
                  Class<?> subscriptionPublisherInjectionClass = Class.forName(subscriptionPublisherClassName
                          + "Injection");
                  if (subscriptionPublisherInjectionClass.isInstance(provider)) {
                      ((SubscriptionPublisherInjection) provider).setSubscriptionPublisher(subscriptionPublisherImpl);
                  }
              } catch (ClassNotFoundException exception) {
                  //if subscriptionPublisherInjectionClassname could not be found, we assume that the provider does not require a SubscriptionPublisher
              }
  
              return subscriptionPublisherImpl;
          } catch (ClassNotFoundException e) {
              throw new IllegalArgumentException("For given provider of joynr interface \"" + interfaceClassName
                      + "\", expected subscription publisher class of type \"" + subcriptionPublisherImplClassName
                      + "\" could not be found by the classloader." + " Please ensure the class can be loaded.");
          } catch (InstantiationException e) {
              throw new IllegalArgumentException("For given provider of joynr interface \"" + interfaceClassName
                      + "\", expected subscription publisher class of type \"" + subcriptionPublisherImplClassName
                      + "\" could not be instantiated due to the following error: " + e.getMessage());
  
          } catch (IllegalAccessException e) {
              throw new IllegalArgumentException("For given provider of joynr interface \"" + interfaceClassName
                      + "\", expected subscription publisher class of type \"" + subcriptionPublisherImplClassName
                      + "\" could not be accessed due to the following error: " + e.getMessage());
          }
      }