public void testWildcardSubscription() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
      final int[] timesCalled = new int[1];
      ParameterizedEvent<JComponent> jComponentRequestEvent = new ParameterizedEvent<JComponent>();

      TypeReference<ParameterizedEvent<? extends Container>> containerWildcardTypeRef = new TypeReference<ParameterizedEvent<? extends Container>>(){};

      eventService.subscribe(containerWildcardTypeRef.getType(), new EventSubscriber() {
         public void onEvent(Object event) {
            timesCalled[0]++;
         }
      });
      TypeReference<ParameterizedEvent<JComponent>> jComponentTypeRef = new TypeReference<ParameterizedEvent<JComponent>>(){};

      eventService.publish(jComponentTypeRef.getType(), jComponentRequestEvent);
      assertEquals(1, timesCalled[0]);

      //publishing a Component should not hit the wildcard since it doesn't extend Component
      TypeReference<ParameterizedEvent<Component>> componentTypeRef = new TypeReference<ParameterizedEvent<Component>>(){};
      ParameterizedEvent<Component> componentRequestEvent = new ParameterizedEvent<Component>();
      eventService.publish(componentTypeRef.getType(), componentRequestEvent);
      assertEquals(1, timesCalled[0]);

      //publish wildcards is a not yet supported
      try {
         eventService.publish(containerWildcardTypeRef.getType(), jComponentRequestEvent);
         fail();
      } catch (IllegalArgumentException ex) {
      }
      assertEquals(1, timesCalled[0]);

      //Test super wildcard, should be opposite of above
      eventService.clearAllSubscribers();
      TypeReference<ParameterizedEvent<? super Container>> containerSuperWildcardTypeRef = new TypeReference<ParameterizedEvent<? super Container>>(){};
      eventService.subscribe(containerSuperWildcardTypeRef.getType(), new EventSubscriber() {
         public void onEvent(Object event) {
            timesCalled[0]++;
         }
      });
      eventService.publish(jComponentTypeRef.getType(), jComponentRequestEvent);
      assertEquals(1, timesCalled[0]);
      eventService.publish(componentTypeRef.getType(), componentRequestEvent);
      assertEquals(2, timesCalled[0]);

      //Test exact matches
   }