You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/08/25 20:24:37 UTC

svn commit: r807750 [1/2] - in /cxf/trunk: api/src/main/java/org/apache/cxf/extension/ api/src/main/java/org/apache/cxf/ws/policy/ api/src/main/java/org/apache/cxf/wsdl/ common/common/src/main/java/org/apache/cxf/common/injection/ common/common/src/mai...

Author: dkulp
Date: Tue Aug 25 18:24:33 2009
New Revision: 807750

URL: http://svn.apache.org/viewvc?rev=807750&view=rev
Log:
Start performance increase phase 1: make as much as possible
lazy-init=true, reduce JSR250 processing

Added:
    cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderLoader.java
      - copied, changed from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java
    cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderLoader.java
      - copied, changed from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java
    cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/WSDLExtensionLoader.java
      - copied, changed from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java
Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/extension/RegistryImpl.java
    cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
    cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java
    cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/AbstractSpringBeanMap.java
    cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanQNameMap.java
    cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java
    cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanQNameMapTest.java
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java
    cxf/trunk/common/xerces-xsd-validation/src/main/resources/META-INF/cxf/cxf-extension-xerces-xsd-validation.xml
    cxf/trunk/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/wsdl/WSDLExtensionRegister.java
    cxf/trunk/rt/bindings/corba/src/main/resources/META-INF/cxf/cxf-extension-corba.xml
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContextResourceResolver.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientLifeCycleManagerImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerLifeCycleManagerImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
    cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java
    cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension-jaxws.xml
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPClientAssertionBuilder.java
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPServerAssertionBuilder.java
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/NoOpPolicyInterceptorProvider.java
    cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml
    cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java
    cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyBuilderImpl.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/ServiceModelPolicyProvider.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMAssertionBuilder.java
    cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMPolicyInterceptorProvider.java
    cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml
    cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java
    cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProviderTest.java
    cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProviderTest.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMAssertionBuilder.java
    cxf/trunk/rt/ws/rm/src/main/resources/META-INF/cxf/cxf-extension-rm.xml
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/rmmanager.xml
    cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/WSSecurityPolicyLoader.java
    cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/builders/ContentEncryptedElementsBuilder.java
    cxf/trunk/rt/ws/security/src/main/resources/META-INF/cxf/cxf-extension-ws-security.xml

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/extension/RegistryImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/extension/RegistryImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/extension/RegistryImpl.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/extension/RegistryImpl.java Tue Aug 25 18:24:33 2009
@@ -52,7 +52,7 @@
     }
 
     public T get(K k) {
-        return  entries.get(k);
+        return entries.get(k);
     }
 
     

Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderLoader.java (from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderLoader.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderLoader.java&p1=cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java&r1=807748&r2=807750&rev=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderLoader.java Tue Aug 25 18:24:33 2009
@@ -17,25 +17,13 @@
  * under the License.
  */
 
-package org.apache.cxf.common.injection;
+package org.apache.cxf.ws.policy;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
 
 /**
- * Marker annotation to let our JSR250 Processor know
- * not to bother examining the class for annotations
- * as it's know not to have any 
+ * Marker interface for objects that would load and register
+ * additional AssertionBuilders when loaded.
  */
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface NoJSR250Annotations {
-    
-    /**
-     * If these fields are null, it will go ahead and do JSR250 processing
-     * as it assumes the values were not set via a constructor
-     */
-    String[] unlessNull() default { };
+public interface AssertionBuilderLoader {
+
 }

Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderLoader.java (from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderLoader.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderLoader.java&p1=cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java&r1=807748&r2=807750&rev=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderLoader.java Tue Aug 25 18:24:33 2009
@@ -17,25 +17,12 @@
  * under the License.
  */
 
-package org.apache.cxf.common.injection;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.cxf.ws.policy;
 
 /**
- * Marker annotation to let our JSR250 Processor know
- * not to bother examining the class for annotations
- * as it's know not to have any 
+ * Marker interface for objects that would load and register
+ * additional PolicyInterceptorProviders when loaded.
  */
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface NoJSR250Annotations {
-    
-    /**
-     * If these fields are null, it will go ahead and do JSR250 processing
-     * as it assumes the values were not set via a constructor
-     */
-    String[] unlessNull() default { };
+public interface PolicyInterceptorProviderLoader {
+
 }

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java Tue Aug 25 18:24:33 2009
@@ -164,8 +164,7 @@
                     registry.registerDeserializer(parentType, elementType, helper); 
                     registry.registerSerializer(parentType, elementType, helper);                         
                     registry.mapExtensionTypes(parentType, elementType, cls);
-                    
-                    helper.getJAXBContext();
+
                     found = true;
                 }
             }

Copied: cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/WSDLExtensionLoader.java (from r807748, cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/WSDLExtensionLoader.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/WSDLExtensionLoader.java&p1=cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java&r1=807748&r2=807750&rev=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/WSDLExtensionLoader.java Tue Aug 25 18:24:33 2009
@@ -17,25 +17,13 @@
  * under the License.
  */
 
-package org.apache.cxf.common.injection;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.cxf.wsdl;
 
 /**
- * Marker annotation to let our JSR250 Processor know
- * not to bother examining the class for annotations
- * as it's know not to have any 
+ * Marker interface to mark beans in the config that register
+ * addition WSDLExtensors so the WSDLManager can load the 
+ * additional extensors on demand
  */
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface NoJSR250Annotations {
-    
-    /**
-     * If these fields are null, it will go ahead and do JSR250 processing
-     * as it assumes the values were not set via a constructor
-     */
-    String[] unlessNull() default { };
+public interface WSDLExtensionLoader {
+
 }

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/NoJSR250Annotations.java Tue Aug 25 18:24:33 2009
@@ -35,7 +35,12 @@
     
     /**
      * If these fields are null, it will go ahead and do JSR250 processing
-     * as it assumes the values were not set via a constructor
+     * as it assumes the values were not set via a constructor.
+     * 
+     * Be careful with this.  If the field is injected with a value via @Resource,
+     * when the other annotations are processed (@PostConstruct), the field is then
+     * not-null so they won't be run.   The best bet is to make sure the @Resource
+     * setter methods handle any registration or similar
      */
     String[] unlessNull() default { };
 }

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/AbstractSpringBeanMap.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/AbstractSpringBeanMap.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/AbstractSpringBeanMap.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/AbstractSpringBeanMap.java Tue Aug 25 18:24:33 2009
@@ -43,6 +43,7 @@
     protected ApplicationContext context;
     protected Class<?> type;
     protected String idsProperty;
+    protected String staticFieldName;
     protected Map<X, List<String>> idToBeanName = new ConcurrentHashMap<X, List<String>>();
     protected Map<X, V> putStore = new ConcurrentHashMap<X, V>();
 
@@ -107,6 +108,14 @@
         this.idsProperty = idsProperty;
     }
 
+    public String getStaticFieldName() {
+        return staticFieldName;
+    }
+
+    public void setStaticFieldName(String staticFieldName) {
+        this.staticFieldName = staticFieldName;
+    }
+
     public void clear() {
         throw new UnsupportedOperationException();
     }
@@ -214,7 +223,7 @@
         }
     }
     
-    private class SpringBeanMapWrapper implements Map<X, V> {
+    private class SpringBeanMapWrapper extends ConcurrentHashMap<X, V> implements Map<X, V> {
 
         public void clear() {
             AbstractSpringBeanMap.this.clear();

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanQNameMap.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanQNameMap.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanQNameMap.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanQNameMap.java Tue Aug 25 18:24:33 2009
@@ -18,19 +18,26 @@
  */
 package org.apache.cxf.configuration.spring;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collection;
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.helpers.CastUtils;
 import org.springframework.beans.Mergeable;
 import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.BeanIsAbstractException;
 import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanDefinitionHolder;
 import org.springframework.beans.factory.config.BeanReference;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+import org.springframework.beans.factory.config.TypedStringValue;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ConfigurableApplicationContext;
 
+@NoJSR250Annotations
 public class SpringBeanQNameMap<V> 
     extends AbstractSpringBeanMap<QName, V> {
 
@@ -70,7 +77,20 @@
                         ids = (Collection<?>)value;
                     }
                 } 
-              
+                if (ids == null && staticFieldName != null) {
+                    Class<?> cls = context.getType(beanNames[i]);
+                    try {
+                        Field f = cls.getDeclaredField(staticFieldName);
+                        f.setAccessible(true);
+                        Collection<QName> sids = CastUtils.cast((Collection<?>)f.get(null));
+                        if (sids != null) {
+                            ids = new ArrayList<QName>(sids);
+                        }
+                    } catch (Exception ex) {
+                        //ignore, fall through
+                    }
+                }
+
                 // if values are not legal keys (for lazy-init bean definitions id values may be
                 // BeanDefinitionHolders), load the bean and get its id values instead
                 // for BeanReference type values, simply resolve reference
@@ -84,7 +104,29 @@
                             BeanReference br = (BeanReference)id;
                             Object refId = context.getBean(br.getBeanName());
                             checked.add(refId);
+                        } else if (id instanceof BeanDefinitionHolder) {
+                            BeanDefinitionHolder bdh = (BeanDefinitionHolder)id;
+                            if (QName.class.getName().equals(bdh.getBeanDefinition().getBeanClassName())) {
+                                try {
+                                    java.util.List l = bdh.getBeanDefinition().getConstructorArgumentValues()
+                                        .getGenericArgumentValues();
+                                    
+                                    ConstructorArgumentValues.ValueHolder v 
+                                        = (ConstructorArgumentValues.ValueHolder)l.get(0);
+                                    
+                                    TypedStringValue nss = (TypedStringValue)v.getValue();
+                                    v = (ConstructorArgumentValues.ValueHolder)l.get(1);
+                                    TypedStringValue ln = (TypedStringValue)v.getValue();
+                                    checked.add(new QName(nss.getValue(), ln.getValue()));
+                                } catch (Exception ex) {
+                                    //ignore
+                                    break;
+                                }
+                            } else {
+                                break;
+                            }
                         } else {
+                            
                             break;
                         }
                     }

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java Tue Aug 25 18:24:33 2009
@@ -20,6 +20,7 @@
 package org.apache.cxf.resource;
 
 import java.io.InputStream;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -43,8 +44,8 @@
         addResourceResolver(resolver);
     }
     
-    public DefaultResourceManager(List<ResourceResolver> resolvers) {
-        registeredResolvers.addAll(resolvers);
+    public DefaultResourceManager(List<? extends ResourceResolver> resolvers) {
+        addResourceResolvers(resolvers);
     }
  
     public final <T> T resolveResource(String name, Class<T> type) { 
@@ -60,12 +61,16 @@
         return findResource(name, InputStream.class, true, registeredResolvers);
     } 
 
-
     public final void addResourceResolver(ResourceResolver resolver) { 
         if (!registeredResolvers.contains(resolver)) { 
             registeredResolvers.add(0, resolver);
         }
     } 
+    public final void addResourceResolvers(Collection<? extends ResourceResolver> resolvers) { 
+        for (ResourceResolver r : resolvers) {
+            addResourceResolver(r);
+        }
+    } 
 
     public final void removeResourceResolver(ResourceResolver resolver) { 
         if (registeredResolvers.contains(resolver)) { 

Modified: cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanQNameMapTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanQNameMapTest.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanQNameMapTest.java (original)
+++ cxf/trunk/common/common/src/test/java/org/apache/cxf/configuration/spring/SpringBeanQNameMapTest.java Tue Aug 25 18:24:33 2009
@@ -42,18 +42,18 @@
                                                    .createMap());
         assertNotNull(beans);
 
-        assertEquals(2, PersonQNameImpl.getLoadCount());
+        assertEquals(1, PersonQNameImpl.getLoadCount());
         assertEquals(4, beans.keySet().size());
 
         QName qn1 = new QName("http://cxf.apache.org", "anonymous");
         Person p1 = beans.get(qn1);
         assertNotNull(p1);
-        assertEquals(2, PersonQNameImpl.getLoadCount());
+        assertEquals(1, PersonQNameImpl.getLoadCount());
 
         QName qn2 = new QName("http://cxf.apache.org", "myself");
         Person p2 = beans.get(qn2);
         assertNotNull(p2);
-        assertEquals(3, PersonQNameImpl.getLoadCount());
+        assertEquals(2, PersonQNameImpl.getLoadCount());
 
         QName qn3 = new QName("http://cxf.apache.org", "other");
         Person p3 = beans.get(qn3);

Modified: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java (original)
+++ cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java Tue Aug 25 18:24:33 2009
@@ -22,13 +22,13 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import javax.xml.transform.TransformerException;
 
 import org.w3c.dom.DOMErrorHandler;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.xmlschema.XmlSchemaValidationManager;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
@@ -37,19 +37,23 @@
 /**
  * 
  */
+@NoJSR250Annotations(unlessNull = "bus")
 public class XercesXsdValidationImpl implements XmlSchemaValidationManager {
     private static final Logger LOG = LogUtils.getL7dLogger(XercesXsdValidationImpl.class);
 
     private Bus bus;
     private XercesSchemaValidationUtils utils;
 
+    public XercesXsdValidationImpl() {
+    }
+    
+    public XercesXsdValidationImpl(Bus b) {
+        setBus(b);
+    }
+    
     @Resource
-    public void setBus(Bus b) {
+    public final void setBus(Bus b) {
         bus = b;
-    }
-
-    @PostConstruct
-    public void register() {
 
         try {
             utils = new XercesSchemaValidationUtils();

Modified: cxf/trunk/common/xerces-xsd-validation/src/main/resources/META-INF/cxf/cxf-extension-xerces-xsd-validation.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/src/main/resources/META-INF/cxf/cxf-extension-xerces-xsd-validation.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/src/main/resources/META-INF/cxf/cxf-extension-xerces-xsd-validation.xml (original)
+++ cxf/trunk/common/xerces-xsd-validation/src/main/resources/META-INF/cxf/cxf-extension-xerces-xsd-validation.xml Tue Aug 25 18:24:33 2009
@@ -23,8 +23,8 @@
 
 	<bean id="org.apache.cxf.xsdvalidation.XercesXsdValidationImpl"
 		class="org.apache.cxf.xsdvalidation.XercesXsdValidationImpl"
-		>
-		<property name="bus" ref="cxf"/>
+		lazy-init="true">
+		<constructor-arg ref="cxf"/>
 	</bean>
 
 </beans>

Modified: cxf/trunk/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/wsdl/WSDLExtensionRegister.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/wsdl/WSDLExtensionRegister.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/wsdl/WSDLExtensionRegister.java (original)
+++ cxf/trunk/rt/bindings/corba/src/main/java/org/apache/cxf/binding/corba/wsdl/WSDLExtensionRegister.java Tue Aug 25 18:24:33 2009
@@ -19,30 +19,27 @@
 
 package org.apache.cxf.binding.corba.wsdl;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import javax.xml.bind.JAXBException;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.wsdl.JAXBExtensionHelper;
 import org.apache.cxf.wsdl.TExtensibilityElementImpl;
+import org.apache.cxf.wsdl.WSDLExtensionLoader;
 import org.apache.cxf.wsdl.WSDLManager;
 
 /**
  * 
  */
-public final class WSDLExtensionRegister {
+@NoJSR250Annotations
+public final class WSDLExtensionRegister implements WSDLExtensionLoader { 
     private static final String YOKO_NAMESPACE = "http://schemas.apache.org/yoko/bindings/corba";
-
-    Bus bus;
     
-    @Resource
-    public void setBus(Bus b) {
-        bus = b;
+    public WSDLExtensionRegister(Bus b) {
+        registerYokoCompatibleExtensors(b);
     }
     
-    @PostConstruct
-    void registerYokoCompatibleExtensors() {
+    void registerYokoCompatibleExtensors(Bus bus) {
         WSDLManager manager = bus.getExtension(WSDLManager.class);
         createCompatExtensor(manager, javax.wsdl.Binding.class,
                              org.apache.cxf.binding.corba.wsdl.BindingType.class);

Modified: cxf/trunk/rt/bindings/corba/src/main/resources/META-INF/cxf/cxf-extension-corba.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/corba/src/main/resources/META-INF/cxf/cxf-extension-corba.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/corba/src/main/resources/META-INF/cxf/cxf-extension-corba.xml (original)
+++ cxf/trunk/rt/bindings/corba/src/main/resources/META-INF/cxf/cxf-extension-corba.xml Tue Aug 25 18:24:33 2009
@@ -35,12 +35,13 @@
         </property>
         <property name="transportIds">
             <list>
-		<value>http://cxf.apache.org/bindings/corba</value>
-	        <value>http://schemas.apache.org/yoko/bindings/corba</value>
+				<value>http://cxf.apache.org/bindings/corba</value>
+	        	<value>http://schemas.apache.org/yoko/bindings/corba</value>
             </list>
         </property>
     </bean>
     
-    <bean class="org.apache.cxf.binding.corba.wsdl.WSDLExtensionRegister" lazy-init="false"/>
-
+    <bean class="org.apache.cxf.binding.corba.wsdl.WSDLExtensionRegister" lazy-init="true">
+    	<constructor-arg ref="cxf"/>
+	</bean>
 </beans>

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java Tue Aug 25 18:24:33 2009
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.bus.resource;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -26,6 +27,7 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.resource.DefaultResourceManager;
 import org.apache.cxf.resource.ObjectTypeResolver;
@@ -41,10 +43,14 @@
     public ResourceManagerImpl() {
     }
 
-    public ResourceManagerImpl(List<ResourceResolver> r) {
+    public ResourceManagerImpl(List<? extends ResourceResolver> r) {
         super(r);
     }
-    public ResourceManagerImpl(Bus b, List<ResourceResolver> r) {
+    public ResourceManagerImpl(Bus b) {
+        super();
+        setBus(b);
+    }
+    public ResourceManagerImpl(Bus b, List<? extends ResourceResolver> r) {
         super(r);
         setBus(b);
     }
@@ -60,17 +66,30 @@
      * Set the list of resolvers for this resource manager.
      * @param resolvers
      */
-    public void setResolvers(List<ResourceResolver> resolvers) {
+    public final void setResolvers(List<? extends ResourceResolver> resolvers) {
         registeredResolvers.clear();
         registeredResolvers.addAll(resolvers);
     }
     
+    public final void addResolvers(Collection<? extends ResourceResolver> resolvers) {
+        super.addResourceResolvers(resolvers);
+    }
+    public final void addResolver(ResourceResolver resolver) {
+        super.addResourceResolver(resolver);
+    }
+    
     @Resource
     public final void setBus(Bus b) {
-        bus = b;
-        super.addResourceResolver(new ObjectTypeResolver(bus));
-        if (null != bus) {
-            bus.setExtension(this, ResourceManager.class);
+        if (bus != b) {
+            bus = b;
+            super.addResourceResolver(new ObjectTypeResolver(bus));
+            if (null != bus) {
+                bus.setExtension(this, ResourceManager.class);
+            }
+            ConfiguredBeanLocator locator = bus.getExtension(ConfiguredBeanLocator.class);
+            if (locator != null) {
+                this.addResolvers(locator.getBeansOfType(ResourceResolver.class));
+            }
         }
     }
 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContextResourceResolver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContextResourceResolver.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContextResourceResolver.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContextResourceResolver.java Tue Aug 25 18:24:33 2009
@@ -39,6 +39,9 @@
     
     public BusApplicationContextResourceResolver() {
     }
+    public BusApplicationContextResourceResolver(ApplicationContext c) {
+        context = c;
+    }
     
 
     public InputStream getAsStream(String name) {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java Tue Aug 25 18:24:33 2009
@@ -65,9 +65,14 @@
         if (resourceManager == null) {
             if (bean instanceof ResourceManager) {
                 resourceManager = (ResourceManager)bean;
+                resourceManager.addResourceResolver(new BusApplicationContextResourceResolver(context));
             } else {
                 Bus b = (Bus)context.getBean("cxf");
-                resourceManager = b.getExtension(ResourceManager.class);
+                ResourceManager m = b.getExtension(ResourceManager.class);
+                if (resourceManager == null && m != null) {
+                    resourceManager = m;
+                    resourceManager.addResourceResolver(new BusApplicationContextResourceResolver(context));
+                }
             }
         }
         return resourceManager;
@@ -89,11 +94,13 @@
         }
         if (bean != null 
             && injectable(bean, beanId)) {
-            //System.err.println("p :" + (++count) + ": " + bean.getClass().getName() + " " + beanId);
             new ResourceInjector(getResourceManager(bean)).inject(bean);
-        //} else if (bean != null) {
-            //System.err.println("np: " + (++count2) 
-            //                   + ": " + bean.getClass().getName() + " " + beanId);            
+            /*
+            System.err.println("p :" + (++count) + ": " + bean.getClass().getName() + " " + beanId);
+        } else if (bean != null) {
+            System.err.println("np: " + (++count2) 
+                               + ": " + bean.getClass().getName() + " " + beanId);
+            */
         }
         return bean;
     }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java Tue Aug 25 18:24:33 2009
@@ -39,7 +39,7 @@
 
     /** {@inheritDoc}*/
     public List<String> getBeanNamesOfType(Class<?> type) {
-        return Arrays.asList(context.getBeanNamesForType(type));
+        return Arrays.asList(context.getBeanNamesForType(type, false, true));
     }
 
     /** {@inheritDoc}*/
@@ -50,13 +50,15 @@
     /** {@inheritDoc}*/
     @SuppressWarnings("unchecked")
     public <T> Collection<? extends T> getBeansOfType(Class<T> type) {
-        return context.getBeansOfType(type).values();
+        return context.getBeansOfType(type, false, true).values();
     }
 
     @SuppressWarnings("unchecked")
     public <T> boolean loadBeansOfType(Class<T> type,
                                        BeanLoaderListener<T> listener) {
-        List<String> list = new ArrayList<String>(Arrays.asList(context.getBeanNamesForType(type)));
+        List<String> list = new ArrayList<String>(Arrays.asList(context.getBeanNamesForType(type, 
+                                                                                            false, 
+                                                                                            true)));
         Collections.reverse(list);
         for (String s : list) {
             Class<? extends T> c = context.getType(s);

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientLifeCycleManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientLifeCycleManagerImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientLifeCycleManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientLifeCycleManagerImpl.java Tue Aug 25 18:24:33 2009
@@ -22,8 +22,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.extension.BusExtension;
 
+@NoJSR250Annotations
 public class ClientLifeCycleManagerImpl implements ClientLifeCycleManager, BusExtension {
     
     private List<ClientLifeCycleListener> listeners = new ArrayList<ClientLifeCycleListener>(); 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerLifeCycleManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerLifeCycleManagerImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerLifeCycleManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerLifeCycleManagerImpl.java Tue Aug 25 18:24:33 2009
@@ -20,10 +20,13 @@
 package org.apache.cxf.endpoint;
 
 import java.util.List;
+
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.extension.BusExtension;
 
+@NoJSR250Annotations
 public class ServerLifeCycleManagerImpl implements ServerLifeCycleManager, BusExtension {
     
     private List<ServerLifeCycleListener> listeners = 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java Tue Aug 25 18:24:33 2009
@@ -21,9 +21,11 @@
 
 import java.util.SortedSet;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.util.SortedArraySet;
 import org.apache.cxf.extension.BusExtension;
 
+@NoJSR250Annotations
 public class PhaseManagerImpl implements PhaseManager, BusExtension {
 
     private SortedSet<Phase> inPhases;

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java Tue Aug 25 18:24:33 2009
@@ -178,8 +178,8 @@
     }
     
     @Resource(name = "org.apache.cxf.workqueue.WorkQueueManager")
-    public void setManager(WorkQueueManagerImpl mgr) {
-        manager = mgr;
+    public void setManager(WorkQueueManager mgr) {
+        manager = (WorkQueueManagerImpl)mgr;
     }
     public WorkQueueManager getManager() {
         return manager;

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java Tue Aug 25 18:24:33 2009
@@ -55,8 +55,10 @@
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.CacheMap;
 import org.apache.cxf.common.util.PropertiesLoaderUtils;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.service.model.ServiceSchemaInfo;
 import org.apache.cxf.wsdl.JAXBExtensionHelper;
+import org.apache.cxf.wsdl.WSDLExtensionLoader;
 import org.apache.cxf.wsdl.WSDLManager;
 
 /**
@@ -111,14 +113,18 @@
     }
     public WSDLManagerImpl(Bus b) throws BusException {
         this();
-        bus = b;
+        setBus(b);
     }
     
     @Resource
-    public void setBus(Bus b) {
+    public final void setBus(Bus b) {
         bus = b;
         if (null != bus) {
             bus.setExtension(this, WSDLManager.class);
+            ConfiguredBeanLocator loc = bus.getExtension(ConfiguredBeanLocator.class);
+            if (loc != null) {
+                loc.getBeansOfType(WSDLExtensionLoader.class);
+            }
         }
     }
 

Modified: cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml (original)
+++ cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml Tue Aug 25 18:24:33 2009
@@ -42,13 +42,6 @@
     	class="org.apache.cxf.bus.resource.ResourceManagerImpl" 
     	lazy-init="true">
     	<constructor-arg ref="cxf"/>
-       	<constructor-arg>
-            <list>
-                <bean class="org.apache.cxf.resource.ClasspathResolver"/>
-                <bean class="org.apache.cxf.resource.ClassLoaderResolver"/>
-                <bean class="org.apache.cxf.bus.spring.BusApplicationContextResourceResolver"/>
-            </list>
-       </constructor-arg>
     </bean>
 
     <bean id="org.apache.cxf.configuration.Configurer" 

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java Tue Aug 25 18:24:33 2009
@@ -21,22 +21,29 @@
 
 import java.io.InputStream;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import javax.xml.ws.WebServiceContext;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.resource.ResourceManager;
 import org.apache.cxf.resource.ResourceResolver;
 
-
+@NoJSR250Annotations(unlessNull = "bus")
 public class WebServiceContextResourceResolver implements ResourceResolver {
     
-    @Resource
     Bus bus;
+
+    public WebServiceContextResourceResolver() {
+    }
     
-    @PostConstruct
-    public void register() {
+    public WebServiceContextResourceResolver(Bus b) {
+        setBus(b);
+    }
+    
+    @Resource
+    public final void setBus(Bus b) {
+        bus = b;
         if (bus != null
             && bus.getExtension(ResourceManager.class) != null) {
             bus.getExtension(ResourceManager.class).addResourceResolver(this);

Modified: cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension-jaxws.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension-jaxws.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension-jaxws.xml (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension-jaxws.xml Tue Aug 25 18:24:33 2009
@@ -25,7 +25,9 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
     <bean class="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver" 
-	  id="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver" lazy-init="false"/>
+	  id="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver" lazy-init="true">
+	  <constructor-arg ref="cxf"/>
+	</bean>
     <bean class="org.apache.cxf.jaxws.context.WebServiceContextImpl" 
 	  id="org.apache.cxf.jaxws.context.WebServiceContextImpl" lazy-init="true"/>
     <alias name="org.apache.cxf.jaxws.context.WebServiceContextImpl" 

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPClientAssertionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPClientAssertionBuilder.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPClientAssertionBuilder.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPClientAssertionBuilder.java Tue Aug 25 18:24:33 2009
@@ -19,8 +19,13 @@
 
 package org.apache.cxf.transport.http.policy;
 
+import java.util.Collections;
+import java.util.List;
+
 import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
 import org.apache.cxf.ws.policy.PolicyAssertion;
 import org.apache.cxf.ws.policy.builder.jaxb.JaxbAssertion;
@@ -31,8 +36,11 @@
 /**
  * 
  */
+@NoJSR250Annotations
 public class HTTPClientAssertionBuilder extends JaxbAssertionBuilder<HTTPClientPolicy> {
- 
+    public static final List<QName> KNOWN_ELEMENTS 
+        = Collections.singletonList(PolicyUtils.HTTPCLIENTPOLICY_ASSERTION_QNAME);
+
     public HTTPClientAssertionBuilder() throws JAXBException {
         super(HTTPClientPolicy.class, PolicyUtils.HTTPCLIENTPOLICY_ASSERTION_QNAME);     
     }

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPServerAssertionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPServerAssertionBuilder.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPServerAssertionBuilder.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/HTTPServerAssertionBuilder.java Tue Aug 25 18:24:33 2009
@@ -19,8 +19,13 @@
 
 package org.apache.cxf.transport.http.policy;
 
+import java.util.Collections;
+import java.util.List;
+
 import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.transports.http.configuration.HTTPServerPolicy;
 import org.apache.cxf.ws.policy.PolicyAssertion;
 import org.apache.cxf.ws.policy.builder.jaxb.JaxbAssertion;
@@ -31,8 +36,11 @@
 /**
  * 
  */
+@NoJSR250Annotations
 public class HTTPServerAssertionBuilder extends JaxbAssertionBuilder<HTTPServerPolicy> {
- 
+    public static final List<QName> KNOWN_ELEMENTS 
+        = Collections.singletonList(PolicyUtils.HTTPSERVERPOLICY_ASSERTION_QNAME);
+
     public HTTPServerAssertionBuilder() throws JAXBException {
         super(HTTPServerPolicy.class, PolicyUtils.HTTPSERVERPOLICY_ASSERTION_QNAME);        
     }

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/NoOpPolicyInterceptorProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/NoOpPolicyInterceptorProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/NoOpPolicyInterceptorProvider.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/policy/NoOpPolicyInterceptorProvider.java Tue Aug 25 18:24:33 2009
@@ -24,6 +24,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.ws.policy.AbstractPolicyInterceptorProvider;
 
 /**
@@ -32,6 +33,7 @@
  * before the HTTPConduit becomes invoved (e.g. via a WSPolicyFeature
  * applied to the <jawx:client> bean).
  */
+@NoJSR250Annotations
 public class NoOpPolicyInterceptorProvider
     extends AbstractPolicyInterceptorProvider {
 

Modified: cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml (original)
+++ cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml Tue Aug 25 18:24:33 2009
@@ -24,11 +24,11 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
     <bean class="org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder"
-	  id="org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder"/>
+	  id="org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder" lazy-init="true"/>
     <bean class="org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder"
-	  id="org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder"/>
+	  id="org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder" lazy-init="true"/>
     <bean class="org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider"
-          id="org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider"/>
+          id="org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider" lazy-init="true"/>
  
     
     

Modified: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingAssertionBuilder.java Tue Aug 25 18:24:33 2009
@@ -44,7 +44,7 @@
  */
 public class AddressingAssertionBuilder implements AssertionBuilder {
 
-    private static final Collection<QName> KNOWN = new ArrayList<QName>();
+    private static final Collection<QName> KNOWN_ELEMENTS = new ArrayList<QName>();
     private Bus bus;
     
     public AddressingAssertionBuilder(Bus b) {
@@ -52,12 +52,12 @@
     }
     
     static {
-        KNOWN.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME);
-        KNOWN.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
-        KNOWN.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
-        KNOWN.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME_0705);
-        KNOWN.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME_0705);
-        KNOWN.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME_0705);
+        KNOWN_ELEMENTS.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME);
+        KNOWN_ELEMENTS.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME);
+        KNOWN_ELEMENTS.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME);
+        KNOWN_ELEMENTS.add(MetadataConstants.ADDRESSING_ASSERTION_QNAME_0705);
+        KNOWN_ELEMENTS.add(MetadataConstants.ANON_RESPONSES_ASSERTION_QNAME_0705);
+        KNOWN_ELEMENTS.add(MetadataConstants.NON_ANON_RESPONSES_ASSERTION_QNAME_0705);
     }
     
     public PolicyAssertion build(Element elem) {
@@ -92,7 +92,7 @@
     }
 
     public Collection<QName> getKnownElements() {
-        return KNOWN;
+        return KNOWN_ELEMENTS;
     }
 
     public PolicyAssertion buildCompatible(PolicyAssertion a, PolicyAssertion b) {

Modified: cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml (original)
+++ cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/cxf-extension-addr.xml Tue Aug 25 18:24:33 2009
@@ -23,15 +23,18 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
     <bean class="org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder"
-	  id="org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder">
+	  id="org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder" 
+	  lazy-init="true">
         <constructor-arg ref="cxf"/>
     </bean>
 
     <bean class="org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider"
-	  id="org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider"/>
+	  id="org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider"
+	  lazy-init="true"/>
  
     <bean id="org.apache.cxf.ws.addressing.policy.UsingAddressingAssertionBuilder"
-        class="org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertionBuilder">
+        class="org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertionBuilder"
+        lazy-init="true">
         <property name="knownElements">
             <set>
                 <bean class="javax.xml.namespace.QName">

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.java Tue Aug 25 18:24:33 2009
@@ -26,13 +26,17 @@
 import java.util.ResourceBundle;
 import java.util.logging.Logger;
 
+import javax.annotation.Resource;
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
 
+import org.apache.cxf.Bus;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.configuration.spring.MapProvider;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.extension.RegistryImpl;
@@ -41,6 +45,7 @@
 /**
  * 
  */
+@NoJSR250Annotations(unlessNull = "bus")
 public class AssertionBuilderRegistryImpl extends RegistryImpl<QName, AssertionBuilder> implements
     AssertionBuilderRegistry, BusExtension {
 
@@ -50,10 +55,16 @@
     private static final int IGNORED_CACHE_SIZE = 10;
     private boolean ignoreUnknownAssertions = true; 
     private List<QName> ignored = new ArrayList<QName>(IGNORED_CACHE_SIZE);
+    private Bus bus;
+    private boolean dynamicLoaded;
     
     public AssertionBuilderRegistryImpl() {
         super(null);
     }
+    public AssertionBuilderRegistryImpl(Bus b) {
+        super(null);
+        setBus(b);
+    }
 
     public AssertionBuilderRegistryImpl(Map<QName, AssertionBuilder> builders) {
         super(builders);
@@ -61,6 +72,17 @@
     public AssertionBuilderRegistryImpl(MapProvider<QName, AssertionBuilder> builders) {
         super(builders.createMap());
     }
+    public AssertionBuilderRegistryImpl(Bus b, MapProvider<QName, AssertionBuilder> builders) {
+        super(builders.createMap());
+        setBus(b);
+    }
+    @Resource
+    public final void setBus(Bus b) {
+        bus = b;
+        if (b != null) {
+            b.setExtension(this, AssertionBuilderRegistry.class);
+        }
+    }
 
     public Class<?> getRegistrationType() {
         return AssertionBuilderRegistry.class;
@@ -81,8 +103,18 @@
         ignoreUnknownAssertions = ignore;
     }
 
+    private synchronized void loadDynamic() {
+        if (!dynamicLoaded && bus != null) {
+            dynamicLoaded = true;
+            ConfiguredBeanLocator c = bus.getExtension(ConfiguredBeanLocator.class);
+            if (c != null) {
+                c.getBeansOfType(AssertionBuilderLoader.class);
+            }
+        }
+    }
     public PolicyAssertion build(Element element) {
-
+        loadDynamic();
+        
         AssertionBuilder builder;
 
         QName qname = new QName(element.getNamespaceURI(), element.getLocalName());

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyBuilderImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyBuilderImpl.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyBuilderImpl.java Tue Aug 25 18:24:33 2009
@@ -35,6 +35,7 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.neethi.All;
@@ -50,6 +51,7 @@
  * provides methods to create Policy and PolicyReferenceObjects
  * from DOM elements, but also from an input stream etc.
  */
+@NoJSR250Annotations
 public class PolicyBuilderImpl implements PolicyBuilder, BusExtension {
     
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(PolicyBuilderImpl.class);

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java Tue Aug 25 18:24:33 2009
@@ -23,11 +23,13 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.logging.Logger;
 
-import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.service.factory.FactoryBeanListenerManager;
@@ -49,6 +51,7 @@
 /**
  * 
  */
+@NoJSR250Annotations(unlessNull = "bus")
 public class PolicyEngineImpl implements PolicyEngine, BusExtension {
     private static final Logger LOG = LogUtils.getL7dLogger(PolicyEngineImpl.class);
     
@@ -65,9 +68,9 @@
     
     private Bus bus;
     private PolicyRegistry registry;
-    private Collection<PolicyProvider> policyProviders = new CopyOnWriteArrayList<PolicyProvider>();
+    private Collection<PolicyProvider> policyProviders;
     private boolean enabled = true;
-    private boolean ignoreUnknownAssertions = true;
+    private Boolean ignoreUnknownAssertions;
     private boolean addedBusInterceptors;
     private AlternativeSelector alternativeSelector;
 
@@ -79,6 +82,10 @@
         enabled = en;
         init();
     }
+    public PolicyEngineImpl(Bus b) {
+        init();
+        setBus(b);        
+    }
 
     // configuration
 
@@ -86,8 +93,14 @@
         return enabled;
     }
 
-    public void setBus(Bus b) {
+    @Resource
+    public final void setBus(Bus b) {
         bus = b;
+        addBusInterceptors();
+        FactoryBeanListenerManager fblm = bus.getExtension(FactoryBeanListenerManager.class);
+        if (fblm != null) {
+            fblm.addListener(new PolicyAnnotationListener());
+        }
     }
 
     public Bus getBus() {
@@ -98,7 +111,16 @@
         policyProviders = new CopyOnWriteArrayList<PolicyProvider>(p);
     }
    
-    public Collection<PolicyProvider> getPolicyProviders() {
+    public synchronized Collection<PolicyProvider> getPolicyProviders() {
+        if (policyProviders == null) {
+            policyProviders = new CopyOnWriteArrayList<PolicyProvider>();
+            if (bus != null) {
+                ConfiguredBeanLocator loc = bus.getExtension(ConfiguredBeanLocator.class);
+                if (loc != null) {
+                    loc.getBeansOfType(PolicyProvider.class);
+                }
+            }
+        }
         return policyProviders;
     }
 
@@ -119,7 +141,10 @@
         }
     }
 
-    public AlternativeSelector getAlternativeSelector() {    
+    public synchronized AlternativeSelector getAlternativeSelector() {  
+        if (alternativeSelector == null && enabled) {
+            alternativeSelector = new MinimalAlternativeSelector();
+        }
         return alternativeSelector;
     }
 
@@ -128,7 +153,7 @@
     }
 
     public boolean isIgnoreUnknownAssertions() {
-        return ignoreUnknownAssertions;
+        return ignoreUnknownAssertions == null ? true : ignoreUnknownAssertions;
     }
 
     public void setIgnoreUnknownAssertions(boolean ignore) {
@@ -292,14 +317,6 @@
         registry = new PolicyRegistryImpl();
     }
     
-    @PostConstruct
-    public synchronized void postConsruct() {
-        addBusInterceptors();
-        FactoryBeanListenerManager fblm = bus.getExtension(FactoryBeanListenerManager.class);
-        if (fblm != null) {
-            fblm.addListener(new PolicyAnnotationListener());
-        }
-    }
 
 
     public synchronized void removeBusInterceptors() {
@@ -311,19 +328,16 @@
         addedBusInterceptors = false;
     }
 
-    public synchronized void addBusInterceptors() {
-    
-        if (null == alternativeSelector) {
-            alternativeSelector = new MinimalAlternativeSelector();
-        }
-    
+    public final synchronized void addBusInterceptors() {
         if (null == bus || !enabled) {
             return;
         }
     
-        AssertionBuilderRegistry abr = bus.getExtension(AssertionBuilderRegistry.class);
-        if (null != abr) {
-            abr.setIgnoreUnknownAssertions(ignoreUnknownAssertions);
+        if (ignoreUnknownAssertions != null) {
+            AssertionBuilderRegistry abr = bus.getExtension(AssertionBuilderRegistry.class);
+            if (null != abr) {
+                abr.setIgnoreUnknownAssertions(ignoreUnknownAssertions);
+            }
         }
 
         bus.getInInterceptors().add(PolicyInInterceptor.INSTANCE);

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInterceptorProviderRegistryImpl.java Tue Aug 25 18:24:33 2009
@@ -24,8 +24,12 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Resource;
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.configuration.spring.MapProvider;
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.extension.RegistryImpl;
@@ -34,13 +38,21 @@
 /**
  * 
  */
+@NoJSR250Annotations(unlessNull = "bus")
 public class PolicyInterceptorProviderRegistryImpl 
     extends RegistryImpl<QName, PolicyInterceptorProvider> 
     implements PolicyInterceptorProviderRegistry, BusExtension {
 
+    private Bus bus;
+    private boolean dynamicLoaded;
+
     public PolicyInterceptorProviderRegistryImpl() {
         super(null);
     }
+    public PolicyInterceptorProviderRegistryImpl(Bus b) {
+        super(null);
+        setBus(b);
+    }
 
     public PolicyInterceptorProviderRegistryImpl(Map<QName, PolicyInterceptorProvider> interceptors) {
         super(interceptors);
@@ -48,7 +60,18 @@
     public PolicyInterceptorProviderRegistryImpl(MapProvider<QName, PolicyInterceptorProvider> interceptors) {
         super(interceptors.createMap());
     }    
-
+    public PolicyInterceptorProviderRegistryImpl(Bus b, 
+                                                 MapProvider<QName, PolicyInterceptorProvider> interceptors) {
+        super(interceptors.createMap());
+        setBus(b);
+    }    
+    @Resource
+    public final void setBus(Bus b) {
+        bus = b;
+        if (b != null) {
+            b.setExtension(this, PolicyInterceptorProviderRegistry.class);
+        }
+    }
     public void register(PolicyInterceptorProvider provider) {
         for (QName qn : provider.getAssertionTypes()) {
             super.register(qn, provider);
@@ -58,9 +81,18 @@
     public Class<?> getRegistrationType() {
         return PolicyInterceptorProviderRegistry.class;
     }
-    
+    private synchronized void loadDynamic() {
+        if (!dynamicLoaded && bus != null) {
+            dynamicLoaded = true;
+            ConfiguredBeanLocator c = bus.getExtension(ConfiguredBeanLocator.class);
+            if (c != null) {
+                c.getBeansOfType(PolicyInterceptorProviderLoader.class);
+            }
+        }
+    }
     public List<Interceptor> getInterceptors(Collection<PolicyAssertion> alternative, 
                                              boolean out, boolean fault) {
+        loadDynamic();
         List<Interceptor> interceptors = new ArrayList<Interceptor>();
         for (PolicyAssertion a : alternative) {
             if (a.isOptional()) {

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/AbstractPolicyProvider.java Tue Aug 25 18:24:33 2009
@@ -21,8 +21,6 @@
 
 import java.util.ResourceBundle;
 
-import javax.annotation.PostConstruct;
-
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
@@ -53,31 +51,29 @@
     }
     
     protected AbstractPolicyProvider(Bus b) {
-        bus = b;
+        setBus(b);
     }
     
-    public void setBus(Bus b) {
+    public final void setBus(Bus b) {
         bus = b;
+        if (null != bus) {
+            setBuilder(bus.getExtension(PolicyBuilder.class));
+            PolicyEngine pe = (PolicyEngine)bus.getExtension(PolicyEngine.class);
+            if (pe != null) {
+                setRegistry(pe.getRegistry());
+                ((PolicyEngineImpl)pe).getPolicyProviders().add(this);
+            }
+        }
     }
     
-    public void setBuilder(PolicyBuilder b) {
+    public final void setBuilder(PolicyBuilder b) {
         builder = b;
     }
     
-    public void setRegistry(PolicyRegistry r) {
+    public final void setRegistry(PolicyRegistry r) {
         registry = r;
     }  
     
-    @PostConstruct
-    public void init() {
-        if (null != bus) {
-            setBuilder(bus.getExtension(PolicyBuilder.class));
-            PolicyEngine pe = (PolicyEngine)bus.getExtension(PolicyEngine.class);
-            setRegistry(pe.getRegistry());
-            
-            ((PolicyEngineImpl)pe).getPolicyProviders().add(this);
-        }
-    }
     
     protected Policy resolveExternal(PolicyReference ref,  String baseURI) {
         Policy resolved = registry.lookup(ref.getURI());

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/ServiceModelPolicyProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/ServiceModelPolicyProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/ServiceModelPolicyProvider.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/ServiceModelPolicyProvider.java Tue Aug 25 18:24:33 2009
@@ -20,6 +20,7 @@
 package org.apache.cxf.ws.policy.attachment;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -27,6 +28,7 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.neethi.Policy;
 
+@NoJSR250Annotations
 public class ServiceModelPolicyProvider extends AbstractPolicyProvider {
 
     public ServiceModelPolicyProvider(Bus b) {

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/ExternalAttachmentProvider.java Tue Aug 25 18:24:33 2009
@@ -33,6 +33,7 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingMessageInfo;
@@ -52,6 +53,7 @@
 /**
  * 
  */
+@NoJSR250Annotations
 public class ExternalAttachmentProvider extends AbstractPolicyProvider
     implements PolicyProvider {
     

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java Tue Aug 25 18:24:33 2009
@@ -30,6 +30,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.service.model.AbstractDescriptionElement;
 import org.apache.cxf.service.model.BindingFaultInfo;
@@ -55,6 +56,7 @@
  * calculate effective policies based on the policy subject's scope.
  * 
  */
+@NoJSR250Annotations
 public class Wsdl11AttachmentPolicyProvider extends AbstractPolicyProvider 
     implements PolicyProvider {
 

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMAssertionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMAssertionBuilder.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMAssertionBuilder.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMAssertionBuilder.java Tue Aug 25 18:24:33 2009
@@ -35,9 +35,9 @@
 import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertionBuilder;
 
 public class MTOMAssertionBuilder implements AssertionBuilder {
-    private static final Collection<QName> KNOWN = new ArrayList<QName>();
+    private static final Collection<QName> KNOWN_ELEMENTS = new ArrayList<QName>();
     static {
-        KNOWN.add(MetadataConstants.MTOM_ASSERTION_QNAME);
+        KNOWN_ELEMENTS.add(MetadataConstants.MTOM_ASSERTION_QNAME);
     }
     
     public PolicyAssertion build(Element elem) {
@@ -58,7 +58,7 @@
     }
 
     public Collection<QName> getKnownElements() {
-        return KNOWN;
+        return KNOWN_ELEMENTS;
     }
 
     public PolicyAssertion buildCompatible(PolicyAssertion a, PolicyAssertion b) {

Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMPolicyInterceptorProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMPolicyInterceptorProvider.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMPolicyInterceptorProvider.java (original)
+++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/mtom/MTOMPolicyInterceptorProvider.java Tue Aug 25 18:24:33 2009
@@ -24,8 +24,10 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.ws.policy.AbstractPolicyInterceptorProvider;
 
+@NoJSR250Annotations
 public class MTOMPolicyInterceptorProvider extends AbstractPolicyInterceptorProvider {
 
     private static final Collection<QName> ASSERTION_TYPES;
@@ -39,6 +41,8 @@
     
     public MTOMPolicyInterceptorProvider() {
         super(ASSERTION_TYPES);
+        Thread.dumpStack();
+
         getInInterceptors().add(INTERCEPTOR);
         
         getOutInterceptors().add(INTERCEPTOR);

Modified: cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml (original)
+++ cxf/trunk/rt/ws/policy/src/main/resources/META-INF/cxf/cxf-extension-policy.xml Tue Aug 25 18:24:33 2009
@@ -22,26 +22,34 @@
        xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
-    <bean id="org.apache.cxf.ws.policy.AssertionBuilderRegistry" class="org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl">
+    <bean id="org.apache.cxf.ws.policy.AssertionBuilderRegistry" 
+    	class="org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl" lazy-init="true">
+    	<constructor-arg ref="cxf"/>
         <constructor-arg>
             <bean class="org.apache.cxf.configuration.spring.SpringBeanQNameMap">
               <property name="type" value="org.apache.cxf.ws.policy.AssertionBuilder"/>
               <property name="idsProperty" value="knownElements"/>
+              <property name="staticFieldName"  value="KNOWN_ELEMENTS"/>
             </bean>
         </constructor-arg>
     </bean>
     
-    <bean id="org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistry" class="org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistryImpl">
+    <bean id="org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistry"
+    	class="org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistryImpl"
+    	lazy-init="true">
+    	<constructor-arg ref="cxf"/>
         <constructor-arg>
             <bean class="org.apache.cxf.configuration.spring.SpringBeanQNameMap">
               <property name="type" value="org.apache.cxf.ws.policy.PolicyInterceptorProvider"/>
               <property name="idsProperty" value="assertionTypes"/>
+              <property name="staticFieldName"  value="ASSERTION_TYPES"/>
             </bean>
         </constructor-arg>
     </bean>   
     
     <bean id="org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilderRegistry" 
-          class="org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilderRegistry">
+          class="org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilderRegistry"
+          lazy-init="true">
         <constructor-arg>
             <bean class="org.apache.cxf.configuration.spring.SpringBeanQNameMap">
               <property name="type" value="org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilder"/>
@@ -51,30 +59,44 @@
     </bean>   
     
     <bean class="org.apache.cxf.ws.policy.attachment.external.EndpointReferenceDomainExpressionBuilder"
-	  id="org.apache.cxf.ws.policy.attachment.external.EndpointReferenceDomainExpressionBuilder"/> 
+	  id="org.apache.cxf.ws.policy.attachment.external.EndpointReferenceDomainExpressionBuilder"
+	  lazy-init="true"/> 
     
-    <bean id="org.apache.cxf.ws.policy.PolicyBuilder" class="org.apache.cxf.ws.policy.PolicyBuilderImpl">
+    <bean id="org.apache.cxf.ws.policy.PolicyBuilder" 
+    	class="org.apache.cxf.ws.policy.PolicyBuilderImpl"
+    	lazy-init="true">
         <property name="bus" ref="cxf"/>
         <property name="assertionBuilderRegistry" ref="org.apache.cxf.ws.policy.AssertionBuilderRegistry"/>
     </bean>
   
-    <bean id="org.apache.cxf.ws.policy.PolicyEngine" class="org.apache.cxf.ws.policy.PolicyEngineImpl">
-       <property name="bus" ref="cxf"/>
+    <bean id="org.apache.cxf.ws.policy.PolicyEngine" 
+    	class="org.apache.cxf.ws.policy.PolicyEngineImpl"
+    	lazy-init="false">
+    	<!--
+    		cannot be lazy init as it needs to add functionality to the bus
+    		that would query the above beans as needed if policies are 
+    		found
+    	 -->
+       <constructor-arg ref="cxf"/>
     </bean>
     
     <bean class="org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider"
-	  id="org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider">
+	  id="org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider"
+	  lazy-init="true">
         <constructor-arg ref="cxf"/>
     </bean>
         
     <bean class="org.apache.cxf.ws.policy.attachment.ServiceModelPolicyProvider"
-	  id="org.apache.cxf.ws.policy.attachment.ServiceModelPolicyProvider">
+	  id="org.apache.cxf.ws.policy.attachment.ServiceModelPolicyProvider"
+	  lazy-init="true">
         <constructor-arg ref="cxf"/>
     </bean>
     
     <!-- MTOM Policy Support -->
     <bean class="org.apache.cxf.ws.policy.mtom.MTOMAssertionBuilder"
-	  id="org.apache.cxf.ws.policy.mtom.MTOMAssertionBuilder"/>
+	  id="org.apache.cxf.ws.policy.mtom.MTOMAssertionBuilder"
+	  lazy-init="true"/>
     <bean class="org.apache.cxf.ws.policy.mtom.MTOMPolicyInterceptorProvider"
-	  id="org.apache.cxf.ws.policy.mtom.MTOMPolicyInterceptorProvider"/>
+	  id="org.apache.cxf.ws.policy.mtom.MTOMPolicyInterceptorProvider"
+	  lazy-init="true"/>
 </beans>

Modified: cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java?rev=807750&r1=807749&r2=807750&view=diff
==============================================================================
--- cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java (original)
+++ cxf/trunk/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyEngineTest.java Tue Aug 25 18:24:33 2009
@@ -370,7 +370,6 @@
         engine = new PolicyEngineImpl(enabled);
     
         Bus bus = control.createMock(Bus.class);
-        engine.setBus(bus);
         List<Interceptor> out = new ArrayList<Interceptor>();
         List<Interceptor> in = new ArrayList<Interceptor>();
         List<Interceptor> inFault = new ArrayList<Interceptor>();
@@ -382,8 +381,7 @@
             EasyMock.expect(bus.getOutFaultInterceptors()).andReturn(outFault);
             control.replay();
         }
-        
-        engine.addBusInterceptors();
+        engine.setBus(bus);
         
         if (enabled) {
             Set<String> idsOut = getInterceptorIds(out);
@@ -407,8 +405,8 @@
         }
         if (enabled) {
             control.verify();
+            assertNotNull(engine.getAlternativeSelector());
         }
-        assertNotNull(engine.getAlternativeSelector());
     }
     
     @Test