public void testFindByFilterPackageInJarUrlWithPlusChars() throws Exception {
    ClassLoader savedClassLoader = null;
    try {
      savedClassLoader = Thread.currentThread().getContextClassLoader();
      URL url = getClass().getResource("/package+scan+test.jar");

      URL urls[] = {new URL("jar:" + url.toString() + "!/")};
      URLClassLoader classLoader = new URLClassLoader(urls, savedClassLoader);

      Thread.currentThread().setContextClassLoader(classLoader);

      // recreate resolver since we mess with context class loader
      resolver = new DefaultPackageScanClassResolver();

      filter.addIncludePattern("a.*.c.*");
      resolver.addFilter(filter);
      Set<Class<?>> scanned = resolver.findByFilter(filter, "a.b.c");
      assertEquals(1, scanned.size());
      assertEquals("class a.b.c.Test", scanned.iterator().next().toString());
    } finally {
      if (savedClassLoader != null) {
        Thread.currentThread().setContextClassLoader(savedClassLoader);
      }
    }
  }
  public void testFindImplementationsWithExcludePackageFilter() {
    filter.addExcludePattern(scanPackage + ".a.*");
    resolver.addFilter(filter);

    Set<Class<?>> scanned = resolver.findImplementations(ScanTargetOne.class, scanPackage);
    validateMatchingSetContains(scanned, ScanTargetTwo.class);
  }
  public void testFindByAnnotationsWithIncludePackageFilter() {
    filter.addIncludePattern(scanPackage + ".b.*");
    filter.addIncludePattern(scanPackage + ".c.*");
    resolver.addFilter(filter);

    Set<Class<?>> scanned = resolver.findAnnotated(annotations, "org.apache.camel.spring.scan");
    validateMatchingSetContains(scanned, ScanTargetTwo.class, ScanTargetThree.class);
  }
  public void testFindByAnnotationWithExcludePackageFilter() {
    filter.addExcludePattern(scanPackage + ".b.*");
    filter.addExcludePattern(scanPackage + ".c.*");
    resolver.addFilter(filter);

    Set<Class<?>> scanned = resolver.findAnnotated(ScannableOne.class, scanPackage);
    validateMatchingSetContains(scanned, ScanTargetOne.class);

    scanned = resolver.findAnnotated(org.apache.camel.spring.scan.ScannableTwo.class, scanPackage);
    validateMatchingSetContains(scanned);
  }