You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2016/11/20 21:33:40 UTC

svn commit: r1770591 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/src/main/java/org/apache/webbeans/xml/ webbeans-spi/src/main/java/org/apache/webbeans/spi/

Author: struberg
Date: Sun Nov 20 21:33:39 2016
New Revision: 1770591

URL: http://svn.apache.org/viewvc?rev=1770591&view=rev
Log:
OWB-1160 improve BDA url matching in DefaultArchiveService

* we probably might have problems with case-insensitive file systems. Needs a closer look.
* added proper toString for BeanArchiveInfo 

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveInformation.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java
    openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/BeanArchiveService.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1770591&r1=1770590&r2=1770591&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Sun Nov 20 21:33:39 2016
@@ -191,7 +191,7 @@ public class BeansDeployer
         String usage = this.webBeansContext.getOpenWebBeansConfiguration().getProperty(OpenWebBeansConfiguration.USE_EJB_DISCOVERY);
         discoverEjb = Boolean.parseBoolean(usage);
 
-        defaultBeanArchiveInformation = new DefaultBeanArchiveInformation();
+        defaultBeanArchiveInformation = new DefaultBeanArchiveInformation("default");
         defaultBeanArchiveInformation.setBeanDiscoveryMode(BeanDiscoveryMode.ALL);
     }
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveInformation.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveInformation.java?rev=1770591&r1=1770590&r2=1770591&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveInformation.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveInformation.java Sun Nov 20 21:33:39 2016
@@ -26,6 +26,7 @@ import org.apache.webbeans.spi.BeanArchi
 
 public class DefaultBeanArchiveInformation implements BeanArchiveService.BeanArchiveInformation
 {
+    private final String bdaUrl;
     private String version;
     private BeanDiscoveryMode beanDiscoveryMode;
     private List<String> interceptors = new ArrayList<String>();
@@ -40,6 +41,10 @@ public class DefaultBeanArchiveInformati
     private List<String> excludedPackages = null;
     private List<String> allowProxyingClasses = new ArrayList<String>();
 
+    public DefaultBeanArchiveInformation(String bdaUrl)
+    {
+        this.bdaUrl = bdaUrl;
+    }
 
     @Override
     public BeanDiscoveryMode getBeanDiscoveryMode()
@@ -48,6 +53,12 @@ public class DefaultBeanArchiveInformati
     }
 
     @Override
+    public String getBdaUrl()
+    {
+        return bdaUrl;
+    }
+
+    @Override
     public boolean isClassExcluded(String clazz)
     {
         boolean isExcluded = isPackageExcluded(clazz);
@@ -195,4 +206,12 @@ public class DefaultBeanArchiveInformati
         return allowProxyingClasses;
     }
 
+    @Override
+    public String toString()
+    {
+        return "DefaultBeanArchiveInformation{" +
+            "bdaUrl='" + bdaUrl + '\'' +
+            ", beanDiscoveryMode=" + beanDiscoveryMode +
+            '}';
+    }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java?rev=1770591&r1=1770590&r2=1770591&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java Sun Nov 20 21:33:39 2016
@@ -51,6 +51,7 @@ public class DefaultBeanArchiveService i
 {
     private static final String WEB_INF_CLASSES = "WEB-INF/classes/";
     private static final String WEB_INF_CLASSES_MAVEN = "target/classes/";
+    private static final String META_INF_BEANS_XML = "/META-INF/beans.xml";
 
     private static final Logger logger = WebBeansLoggerFacade.getLogger(BeanArchiveService.class);
 
@@ -74,10 +75,18 @@ public class DefaultBeanArchiveService i
             // in this case we need to look whether we have a corresponding beans.xml already scanned
 
             String strippedBeanArchiveUrl = stripProtocol(beanArchiveLocation);
+            strippedBeanArchiveUrl = stripTrailingSlash(strippedBeanArchiveUrl);
 
             for (Map.Entry<String, BeanArchiveInformation> entry : beanArchiveInformations.entrySet())
             {
-                if (stripProtocol(entry.getKey()).startsWith(strippedBeanArchiveUrl))
+                // we have to 'normalise' both values and remove the beans.xml string to be compareable
+                String entryUrl = stripProtocol(entry.getKey());
+                if (entryUrl.length() > META_INF_BEANS_XML.length() &&
+                    entryUrl.substring(entryUrl.length() - META_INF_BEANS_XML.length()).equalsIgnoreCase(META_INF_BEANS_XML))
+                {
+                    entryUrl = entryUrl.substring(0, entryUrl.length() - META_INF_BEANS_XML.length());
+                }
+                if (entryUrl.equals(strippedBeanArchiveUrl))
                 {
                     bdaInfo = entry.getValue();
                     break;
@@ -135,7 +144,7 @@ public class DefaultBeanArchiveService i
         }
 
         // means we need to merge them
-        DefaultBeanArchiveInformation mergedBdaInfo = new DefaultBeanArchiveInformation();
+        DefaultBeanArchiveInformation mergedBdaInfo = new DefaultBeanArchiveInformation(bdaWebClasses.getBdaUrl());
 
         mergedBdaInfo.setBeanDiscoveryMode(BeanDiscoveryMode.max(bdaWebClasses.getBeanDiscoveryMode(), bdaWebInf.getBeanDiscoveryMode()));
 
@@ -188,9 +197,9 @@ public class DefaultBeanArchiveService i
     /**
      * This method exists for extensibility reasons.
      */
-    protected DefaultBeanArchiveInformation createBeanArchiveInformation()
+    protected DefaultBeanArchiveInformation createBeanArchiveInformation(String bdaUrl)
     {
-        return new DefaultBeanArchiveInformation();
+        return new DefaultBeanArchiveInformation(bdaUrl);
     }
 
     private BeanArchiveInformation readBeansXml(URL beansXmlUrl, String beansXmlLocation)
@@ -203,7 +212,7 @@ public class DefaultBeanArchiveService i
         if (!beansXmlLocation.endsWith(".xml"))
         {
             // handle jars without beans.xml file
-            DefaultBeanArchiveInformation bdaInfo = createBeanArchiveInformation();
+            DefaultBeanArchiveInformation bdaInfo = createBeanArchiveInformation(beansXmlLocation);
             bdaInfo.setBeanDiscoveryMode(BeanDiscoveryMode.ANNOTATED);
             return bdaInfo;
         }
@@ -252,6 +261,17 @@ public class DefaultBeanArchiveService i
         return urlPath;
     }
 
+    private String stripTrailingSlash(String urlPath)
+    {
+        if (urlPath.endsWith("/"))
+        {
+            return urlPath.substring(0, urlPath.length()-1);
+        }
+        return urlPath;
+    }
+
+
+
 
     /**
      * Read the information from the given beans.xml and fill it into a
@@ -259,7 +279,7 @@ public class DefaultBeanArchiveService i
      */
     protected BeanArchiveInformation readBeansXml(InputStream xmlStreamIn, String beansXmlLocation) throws IOException
     {
-        DefaultBeanArchiveInformation bdaInfo = createBeanArchiveInformation();
+        DefaultBeanArchiveInformation bdaInfo = createBeanArchiveInformation(beansXmlLocation);
 
         if (xmlStreamIn != null)
         {

Modified: openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/BeanArchiveService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/BeanArchiveService.java?rev=1770591&r1=1770590&r2=1770591&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/BeanArchiveService.java (original)
+++ openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/BeanArchiveService.java Sun Nov 20 21:33:39 2016
@@ -122,6 +122,11 @@ public interface BeanArchiveService
     interface BeanArchiveInformation
     {
         /**
+         * @return The classpath entry this BDA represents.
+         */
+        String getBdaUrl();
+
+        /**
          * @return the version string of the beans.xml file (if any), or <code>null</code> if not set
          */
         String getVersion();