This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans-meecrowave.git

commit ed56bb6e03d0d7bb015b7fc24f1a08299093f8d8
Author: Romain Manni-Bucau <rmannibu...@gmail.com>
AuthorDate: Wed Mar 17 11:06:10 2021 +0100

    [MEECROWAVE-280] enable to run without default scanner disabling features 
we can't support
---
 .../meecrowave/tomcat/MeecrowaveContextConfig.java | 42 ++++++++++++----------
 .../apache/meecrowave/tomcat/OWBJarScanner.java    |  7 +++-
 2 files changed, 29 insertions(+), 20 deletions(-)

diff --git 
a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
 
b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
index ccbb43b..3b13595 100644
--- 
a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
+++ 
b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
@@ -58,6 +58,7 @@ import org.apache.tomcat.util.descriptor.web.WebXml;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.corespi.scanner.xbean.CdiArchive;
 import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
+import org.apache.webbeans.spi.ScannerService;
 import org.xml.sax.InputSource;
 
 public class MeecrowaveContextConfig extends ContextConfig {
@@ -103,26 +104,29 @@ public class MeecrowaveContextConfig extends 
ContextConfig {
         final ClassLoader old = thread.getContextClassLoader();
         thread.setContextClassLoader(loader);
         try {
-            final OWBTomcatWebScannerService scannerService = 
OWBTomcatWebScannerService.class.cast(WebBeansContext.getInstance().getScannerService());
-            
scannerService.setFilter(ofNullable(context.getJarScanner()).map(JarScanner::getJarScanFilter).orElse(null),
 context.getServletContext());
-            scannerService.setDocBase(context.getDocBase());
-            scannerService.setShared(configuration.getSharedLibraries());
-            if (configuration.getWatcherBouncing() > 0) { // note that caching 
should be disabled with this config in most of the times
-                watcher = new ReloadOnChangeController(context, 
configuration.getWatcherBouncing());
-                scannerService.setFileVisitor(f -> watcher.register(f));
+            final ScannerService service = 
WebBeansContext.getInstance().getScannerService();
+            if (OWBTomcatWebScannerService.class.isInstance(service)) {
+                final OWBTomcatWebScannerService scannerService = 
OWBTomcatWebScannerService.class.cast(service);
+                
scannerService.setFilter(ofNullable(context.getJarScanner()).map(JarScanner::getJarScanFilter).orElse(null),
 context.getServletContext());
+                scannerService.setDocBase(context.getDocBase());
+                scannerService.setShared(configuration.getSharedLibraries());
+                if (configuration.getWatcherBouncing() > 0) { // note that 
caching should be disabled with this config in most of the times
+                    watcher = new ReloadOnChangeController(context, 
configuration.getWatcherBouncing());
+                    scannerService.setFileVisitor(f -> watcher.register(f));
+                }
+                scannerService.scan();
+                finder = scannerService.getFinder();
+                finder.link();
+                final CdiArchive archive = 
CdiArchive.class.cast(finder.getArchive());
+                Stream.of(WebServlet.class, WebFilter.class, WebListener.class)
+                        .forEach(marker -> 
finder.findAnnotatedClasses(marker).stream()
+                                .filter(c -> 
!Modifier.isAbstract(c.getModifiers()) && Modifier.isPublic(c.getModifiers()))
+                                .forEach(webComponent -> 
webClasses.computeIfAbsent(
+                                        
archive.classesByUrl().entrySet().stream()
+                                                .filter(e -> 
e.getValue().getClassNames().contains(webComponent.getName()))
+                                                .findFirst().get().getKey(), k 
-> new HashSet<>())
+                                        .add(webComponent)));
             }
-            scannerService.scan();
-            finder = scannerService.getFinder();
-            finder.link();
-            final CdiArchive archive = 
CdiArchive.class.cast(finder.getArchive());
-            Stream.of(WebServlet.class, WebFilter.class, WebListener.class)
-                    .forEach(marker -> 
finder.findAnnotatedClasses(marker).stream()
-                            .filter(c -> 
!Modifier.isAbstract(c.getModifiers()) && Modifier.isPublic(c.getModifiers()))
-                            .forEach(webComponent -> 
webClasses.computeIfAbsent(
-                                    archive.classesByUrl().entrySet().stream()
-                                            .filter(e -> 
e.getValue().getClassNames().contains(webComponent.getName()))
-                                            .findFirst().get().getKey(), k -> 
new HashSet<>())
-                                    .add(webComponent)));
         } finally {
             thread.setContextClassLoader(old);
         }
diff --git 
a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java 
b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
index 3afcb8a..3263951 100644
--- 
a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
+++ 
b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
@@ -28,6 +28,7 @@ import org.apache.tomcat.util.scan.JarFactory;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.corespi.scanner.xbean.CdiArchive;
 import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
+import org.apache.webbeans.spi.ScannerService;
 import org.apache.webbeans.web.scanner.WebScannerService;
 import org.apache.xbean.finder.util.Files;
 
@@ -45,7 +46,11 @@ public class OWBJarScanner implements JarScanner {
         switch (jarScanType) {
             case PLUGGABILITY:
                 final WebBeansContext owb = WebBeansContext.getInstance();
-                final OwbAnnotationFinder finder = 
WebScannerService.class.cast(owb.getScannerService()).getFinder();
+                final ScannerService scannerService = owb.getScannerService();
+                if (!WebScannerService.class.isInstance(scannerService)) {
+                    return;
+                }
+                final OwbAnnotationFinder finder = 
WebScannerService.class.cast(scannerService).getFinder();
                 if (finder == null) {
                     return;
                 }

Reply via email to