Author: vmassol
Date: 2007-11-25 15:27:13 +0100 (Sun, 25 Nov 2007)
New Revision: 6070

Modified:
   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryService.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryServiceImpl.java
Log:
XWIKI-1894: Exception in URL Factory initialization


Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 
2007-11-25 07:25:45 UTC (rev 6069)
+++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 
2007-11-25 14:27:13 UTC (rev 6070)
@@ -62,9 +62,9 @@
 import com.xpn.xwiki.util.Util;
 import com.xpn.xwiki.web.*;
 import com.xpn.xwiki.web.includeservletasstring.IncludeServletAsString;
+import org.apache.commons.httpclient.Credentials;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.Credentials;
 import org.apache.commons.httpclient.auth.AuthScope;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.lang.RandomStringUtils;
@@ -4241,32 +4241,29 @@
                 if (urlFactoryService == null) {
                     LOG.info("Initializing URLFactory Service...");
 
-                    String urlFactoryServiceClass = 
Param("xwiki.urlfactory.serviceclass");
+                    XWikiURLFactoryService factoryService = null;
 
+                    String urlFactoryServiceClass = 
Param("xwiki.urlfactory.serviceclass");
                     if (urlFactoryServiceClass != null) {
                         try {
                             if (LOG.isDebugEnabled())
-                                LOG.debug("Using custom URLFactory Service 
Class "
-                                    + urlFactoryServiceClass + ".");
-                            urlFactoryService =
-                                (XWikiURLFactoryService) 
Class.forName(urlFactoryServiceClass)
-                                    .newInstance();
-                            urlFactoryService.init(this);
-                            LOG.debug("Initialized URLFactory Service using 
Reflection.");
+                                LOG.debug("Using custom URLFactory Service 
Class [" + urlFactoryServiceClass + "]");
+                            factoryService = (XWikiURLFactoryService) 
Class.forName(urlFactoryServiceClass)
+                                .getConstructor(new Class[] 
{XWiki.class}).newInstance(new Object[] {this});
                         } catch (Exception e) {
-                            urlFactoryService = null;
-                            LOG.warn("Failed to initialize URLFactory Service  
"
-                                + urlFactoryServiceClass
-                                + " using Reflection, trying default 
implementation using 'new'.", e);
+                            factoryService = null;
+                            LOG.warn("Failed to initialize URLFactory Service 
[" + urlFactoryServiceClass + "]", e);
                         }
                     }
-                    if (urlFactoryService == null) {
+                    if (factoryService == null) {
                         if (LOG.isDebugEnabled())
-                            LOG.debug("Using default URLFactory Service Class "
-                                + urlFactoryServiceClass + ".");
-                        urlFactoryService = new XWikiURLFactoryServiceImpl();
-                        urlFactoryService.init(this);
+                            LOG.debug("Using default URLFactory Service Class 
[" + urlFactoryServiceClass + "]");
+                        factoryService = new XWikiURLFactoryServiceImpl(this);
                     }
+
+                    // Set the urlFactoryService object in one assignment to 
prevent threading issues when checking for
+                    // null above.
+                    urlFactoryService = factoryService;
                 }
             }
         }

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryService.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryService.java
    2007-11-25 07:25:45 UTC (rev 6069)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryService.java
    2007-11-25 14:27:13 UTC (rev 6070)
@@ -21,11 +21,9 @@
 
 package com.xpn.xwiki.web;
 
-import com.xpn.xwiki.XWiki;
 import com.xpn.xwiki.XWikiContext;
 
 public interface XWikiURLFactoryService
 {
-    public void init(XWiki context);
     public XWikiURLFactory createURLFactory(int mode, XWikiContext context);
 }

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryServiceImpl.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryServiceImpl.java
        2007-11-25 07:25:45 UTC (rev 6069)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/XWikiURLFactoryServiceImpl.java
        2007-11-25 14:27:13 UTC (rev 6070)
@@ -18,7 +18,6 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  *
  */
-
 package com.xpn.xwiki.web;
 
 import com.xpn.xwiki.XWiki;
@@ -33,15 +32,16 @@
 
 public class XWikiURLFactoryServiceImpl implements XWikiURLFactoryService
 {
-    private static final Log log = 
LogFactory.getLog(XWikiURLFactoryService.class);
+    private static final Log LOG = 
LogFactory.getLog(XWikiURLFactoryService.class);
 
-    private Map              factoryMap;
+    private Map factoryMap;
 
-    public XWikiURLFactoryServiceImpl()
+    public XWikiURLFactoryServiceImpl(XWiki xwiki)
     {
+        init(xwiki);
     }
 
-    public void init(XWiki xwiki)
+    private void init(XWiki xwiki)
     {
         factoryMap = new HashMap();
         register(xwiki, XWikiContext.MODE_XMLRPC, XWikiXmlRpcURLFactory.class, 
"xwiki.urlfactory.xmlrpcclass");
@@ -61,13 +61,13 @@
         {
             try
             {
-                log.debug("Using custom url factory: " + urlFactoryClassName);
+                LOG.debug("Using custom url factory: " + urlFactoryClassName);
                 Class urlFactoryClass = Class.forName(urlFactoryClassName);
                 factoryMap.put(factoryMode, urlFactoryClass);
             }
             catch (Exception e)
             {
-                log.error("Faiiled to load custom url factory class: " + 
urlFactoryClassName);
+                LOG.error("Faiiled to load custom url factory class: " + 
urlFactoryClassName);
             }
         }
     }
@@ -83,7 +83,7 @@
         }
         catch (Exception e)
         {
-            log.error("Failed to get construct url factory", e);
+            LOG.error("Failed to get construct url factory", e);
         }
         return urlf;
     }

_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to