Author: sergeyb
Date: Wed Jun 11 07:51:58 2008
New Revision: 666687

URL: http://svn.apache.org/viewvc?rev=666687&view=rev
Log:
Updating SpringBusFactory and BusFactory to try their own loaders in case of 
failures

Modified:
    cxf/branches/2.0.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java
    
cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java

Modified: 
cxf/branches/2.0.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java?rev=666687&r1=666686&r2=666687&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java 
(original)
+++ cxf/branches/2.0.x-fixes/api/src/main/java/org/apache/cxf/BusFactory.java 
Wed Jun 11 07:51:58 2008
@@ -150,10 +150,17 @@
     @SuppressWarnings("unchecked")
     public static BusFactory newInstance(String className) {
         BusFactory instance = null;
-        ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
         if (className == null) {
-            className = getBusFactoryClass(classLoader);
+            ClassLoader loader = 
Thread.currentThread().getContextClassLoader();
+            className = getBusFactoryClass(loader);
+            if (className == null && loader != 
BusFactory.class.getClassLoader()) {
+                className = 
getBusFactoryClass(BusFactory.class.getClassLoader()); 
+            }
         }
+        if (className == null) {
+            className = BusFactory.DEFAULT_BUS_FACTORY;
+        } 
+
         Class<? extends BusFactory> busFactoryClass;
         try {
             busFactoryClass = 
@@ -232,8 +239,6 @@
                 }
             }
 
-            // otherwise use default  
-            busFactoryClass = BusFactory.DEFAULT_BUS_FACTORY;
             return busFactoryClass;
         } catch (Exception ex) {
             LogUtils.log(LOG, Level.SEVERE, 
"FAILED_TO_DETERMINE_BUS_FACTORY_EXC", ex);

Modified: 
cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java?rev=666687&r1=666686&r2=666687&view=diff
==============================================================================
--- 
cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java
 (original)
+++ 
cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java
 Wed Jun 11 07:51:58 2008
@@ -64,6 +64,7 @@
     public Bus createBus(String cfgFile) {
         return createBus(cfgFile, defaultBusNotExists());
     }
+
     public Bus createBus(String cfgFiles[]) {
         return createBus(cfgFiles, defaultBusNotExists());
     }
@@ -71,7 +72,6 @@
     private Bus finishCreatingBus(BusApplicationContext bac) {
         final Bus bus = (Bus)bac.getBean(Bus.DEFAULT_BUS_ID);
 
-        //bus.setExtension(new ConfigurerImpl(bac), Configurer.class);
         bus.setExtension(bac, BusApplicationContext.class);
 
         possiblySetDefaultBus(bus);
@@ -88,18 +88,39 @@
         }
         return createBus(new String[] {cfgFile}, includeDefaults);
     }    
+    
     public Bus createBus(String cfgFiles[], boolean includeDefaults) {
         try {      
-            return finishCreatingBus(new BusApplicationContext(cfgFiles, 
includeDefaults, context));
+            return finishCreatingBus(createApplicationContext(cfgFiles, 
includeDefaults));
         } catch (BeansException ex) {
             LogUtils.log(LOG, Level.WARNING, 
"APP_CONTEXT_CREATION_FAILED_MSG", ex, (Object[])null);
             throw new RuntimeException(ex);
         }
     }
     
+    private BusApplicationContext createApplicationContext(String cfgFiles[], 
boolean includeDefaults) {
+        try {      
+            return new BusApplicationContext(cfgFiles, includeDefaults, 
context);
+        } catch (BeansException ex) {
+            ClassLoader contextLoader = 
Thread.currentThread().getContextClassLoader();
+            if (contextLoader != BusApplicationContext.class.getClassLoader()) 
{
+                Thread.currentThread().setContextClassLoader(
+                    BusApplicationContext.class.getClassLoader());
+                try {
+                    return new BusApplicationContext(cfgFiles, 
includeDefaults, context);        
+                } finally {
+                    
Thread.currentThread().setContextClassLoader(contextLoader);
+                }
+            } else {
+                throw ex;
+            }
+        }
+    }
+    
     public Bus createBus(URL url) {
         return createBus(url, defaultBusNotExists());
     }
+    
     public Bus createBus(URL[] urls) {
         return createBus(urls, defaultBusNotExists());
     }
@@ -110,6 +131,7 @@
         }
         return createBus(new URL[] {url}, includeDefaults);
     }
+    
     public Bus createBus(URL[] urls, boolean includeDefaults) {
         try {      
             return finishCreatingBus(new BusApplicationContext(urls, 
includeDefaults, context));


Reply via email to