You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/10/05 16:59:29 UTC

svn commit: r453261 - in /cocoon/trunk: core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/ core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/ core/cocoon-core/src/test/java/org/apache/cocoon/core/contain...

Author: cziegeler
Date: Thu Oct  5 07:59:27 2006
New Revision: 453261

URL: http://svn.apache.org/viewvc?view=rev&rev=453261
Log:
Continue property override configuration functionality
Fix namespaces (as reported by Felix)

Modified:
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AbstractElementParser.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonNamespaceHandler.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonPropertyOverrideConfigurer.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonBeanPostProcessor.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonElementParser.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonNamespaceHandler.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonServiceManager.java
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapElementParser.java
    cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/core/container/ContainerTestCase.java
    cocoon/trunk/tools/archetypes/cocoon-22-archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml
    cocoon/trunk/tools/cocoon-block-deployer/cocoon-deployer-plugin/src/main/resources/org/apache/cocoon/maven/deployer/monolithic/WEB-INF/applicationContext.xml

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AbstractElementParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AbstractElementParser.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AbstractElementParser.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/AbstractElementParser.java Thu Oct  5 07:59:27 2006
@@ -255,6 +255,7 @@
                 false);
         beanDef.getPropertyValues().addPropertyValue("location", location);
         beanDef.getPropertyValues().addPropertyValue("resourceLoader",  parserContext.getReaderContext().getReader().getResourceLoader());
+        beanDef.getPropertyValues().addPropertyValue("beanNameSeparator", "/");
         this.register(beanDef, CocoonPropertyOverrideConfigurer.class.getName(), parserContext.getRegistry());
     }
 

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonNamespaceHandler.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonNamespaceHandler.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonNamespaceHandler.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonNamespaceHandler.java Thu Oct  5 07:59:27 2006
@@ -23,7 +23,7 @@
 /**
  * Spring namespace handler for the cocoon core namespace.
  * Currently this namespace defines the following elements
- * (in the namespace "http://org.apache.cocoon/core"):
+ * (in the namespace "http://cocoon.apache.org/core"):
  * "settings" : This sets up the Cocoon Settings object (by reading the property
  *              files located under /WEB-INF/cocoon/properties.
  *              By specifying the attribute "processorClassName" an own implementation

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonPropertyOverrideConfigurer.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonPropertyOverrideConfigurer.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonPropertyOverrideConfigurer.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonPropertyOverrideConfigurer.java Thu Oct  5 07:59:27 2006
@@ -55,16 +55,26 @@
      */
     public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
     throws BeansException {
+        if ( this.logger.isDebugEnabled() ) {
+            this.logger.debug("Processing bean factory: " + beanFactory);
+            this.logger.debug("Trying to read from directory: " + this.location);
+        }
         final Properties mergedProps = new Properties();
         final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(resourceLoader);
         final Resource dirResource = resourceLoader.getResource(this.location);
 
         if ( dirResource.exists() ) {
+            if ( this.logger.isDebugEnabled() ) {
+                this.logger.debug("Scanning directory: " + dirResource);
+            }
             try {
                 Resource[] resources = resolver.getResources(this.location + "/*.properties");
                 if ( resources != null ) {
                     Arrays.sort(resources, AbstractSettingsBeanFactoryPostProcessor.getResourceComparator());
                     for(int i=0; i < resources.length; i++) {
+                        if ( this.logger.isDebugEnabled() ) {
+                            this.logger.debug("Reading property file: " + resources[i]);
+                        }
                         final Properties p = new Properties();
                         p.load(resources[i].getInputStream());
                         mergedProps.putAll(p);

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonBeanPostProcessor.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonBeanPostProcessor.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonBeanPostProcessor.java Thu Oct  5 07:59:27 2006
@@ -16,8 +16,12 @@
 */
 package org.apache.cocoon.core.container.spring.avalon;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
@@ -29,12 +33,19 @@
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.configuration.impl.MutableSettings;
+import org.apache.cocoon.core.container.spring.AbstractSettingsBeanFactoryPostProcessor;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.BeanCreationException;
+import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.BeanFactoryAware;
 import org.springframework.beans.factory.BeanInitializationException;
 import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 
 /**
  * This is a Spring BeanPostProcessor adding support for the Avalon lifecycle interfaces.
@@ -51,12 +62,22 @@
     protected Context context;
     protected BeanFactory beanFactory;
     protected ConfigurationInfo configurationInfo;
-    protected Settings settings;
+    protected Settings settings = new MutableSettings("test");
+    protected ResourceLoader resourceLoader = new DefaultResourceLoader();
+    protected String location = "WEB-INF/cocoon/xconf";
 
     public void setSettings(Settings settings) {
         this.settings = settings;
     }
 
+    public void setResourceLoader(final ResourceLoader loader) {
+        this.resourceLoader = loader;
+    }
+
+    public void setLocation(final String value) {
+        this.location = value;
+    }
+
     /**
      * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory)
      */
@@ -81,42 +102,86 @@
             return;
         }
         // replace properties in configuration objects
-        final Iterator i = this.configurationInfo.getComponents().values().iterator();
-        while ( i.hasNext() ) {
-            final ComponentInfo info = (ComponentInfo) i.next();
-            if ( info.getConfiguration() != null ) {
-                final List names = this.settings.getPropertyNames(info.getRole() + '.');
-                if ( info.getAlias() != null ) {
-                    names.addAll(this.settings.getPropertyNames(info.getAlias() + '.'));
+        if ( this.logger.isDebugEnabled() ) {
+            this.logger.debug("Processing component configurations.");
+            this.logger.debug("Trying to read properties from directory: " + this.location);
+        }
+        final Properties mergedProps = new Properties();
+        final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(resourceLoader);
+        final Resource dirResource = resourceLoader.getResource(this.location);
+
+        if ( dirResource.exists() ) {
+            if ( this.logger.isDebugEnabled() ) {
+                this.logger.debug("Scanning directory: " + dirResource);
+            }
+            try {
+                Resource[] resources = resolver.getResources(this.location + "/*.properties");
+                if ( resources != null ) {
+                    Arrays.sort(resources, AbstractSettingsBeanFactoryPostProcessor.getResourceComparator());
+                    for(int i=0; i < resources.length; i++) {
+                        if ( this.logger.isDebugEnabled() ) {
+                            this.logger.debug("Reading property file: " + resources[i]);
+                        }
+                        final Properties p = new Properties();
+                        p.load(resources[i].getInputStream());
+                        mergedProps.putAll(p);
+                    }
                 }
-                final Iterator namesIter = names.iterator();
-                while ( namesIter.hasNext() ) {
-                    final String name = (String)namesIter.next();
-                    final String value = this.settings.getProperty(name);
-                    String propName;
-                    if ( name.startsWith(info.getRole()) ) {
-                        propName = name.substring(info.getRole().length() + 1);
-                    } else {
-                        propName = name.substring(info.getAlias().length() + 1);
+            } catch (IOException ioe) {
+                throw new BeanDefinitionStoreException("Unable to read property configurations from " + this.location, ioe);
+            }
+        }
+        if ( mergedProps.size() > 0 ) {
+            final Iterator i = this.configurationInfo.getComponents().values().iterator();
+            while ( i.hasNext() ) {
+                final ComponentInfo info = (ComponentInfo) i.next();
+                if ( info.getConfiguration() != null ) {
+                    final List names = this.getKeys(mergedProps, info.getRole());
+                    if ( info.getAlias() != null ) {
+                        names.addAll(this.getKeys(mergedProps, info.getAlias()));
                     }
-                    Configuration config = info.getConfiguration();
-                    int pos;
-                    do {
-                        pos = propName.indexOf('.');
-                        if ( pos != - 1 ) {
-                            config = this.getAndCreateConfiguration(config, propName.substring(0, pos));
-                            propName = propName.substring(pos+1);
+                    final Iterator namesIter = names.iterator();
+                    while ( namesIter.hasNext() ) {
+                        final String name = (String)namesIter.next();
+                        final String value = mergedProps.getProperty(name);
+                        String propName;
+                        if ( name.startsWith(info.getRole()) ) {
+                            propName = name.substring(info.getRole().length() + 1);
+                        } else {
+                            propName = name.substring(info.getAlias().length() + 1);
+                        }
+                        Configuration config = info.getConfiguration();
+                        int pos;
+                        do {
+                            pos = propName.indexOf('.');
+                            if ( pos != - 1 ) {
+                                config = this.getAndCreateConfiguration(config, propName.substring(0, pos));
+                                propName = propName.substring(pos+1);
+                            }
+                        } while ( pos != -1 );
+                        if ( propName.startsWith("@") ) {
+                            ((DefaultConfiguration)config).setAttribute(propName.substring(1), value);
+                        } else {
+                            config = this.getAndCreateConfiguration(config, propName);
+                            ((DefaultConfiguration)config).setValue(value);
                         }
-                    } while ( pos != -1 );
-                    if ( propName.startsWith("@") ) {
-                        ((DefaultConfiguration)config).setAttribute(propName.substring(1), value);
-                    } else {
-                        config = this.getAndCreateConfiguration(config, propName);
-                        ((DefaultConfiguration)config).setValue(value);
                     }
-                }
-             }
+                 }
+            }
+        }
+    }
+
+    protected List getKeys(Properties mergedProps, String role) {
+        final String prefix = role + '/';
+        final List l = new ArrayList();
+        final Iterator i = mergedProps.keySet().iterator();
+        while ( i.hasNext() ) {
+            final String key = (String)i.next();
+            if ( key.startsWith(prefix) ) {
+                l.add(key);
+            }
         }
+        return l;
     }
 
     protected Configuration getAndCreateConfiguration(Configuration config, String name) {

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonElementParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonElementParser.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonElementParser.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonElementParser.java Thu Oct  5 07:59:27 2006
@@ -129,6 +129,8 @@
         beanDef.getPropertyValues().addPropertyValue("logger", new RuntimeBeanReference(ProcessingUtil.LOGGER_ROLE));
         beanDef.getPropertyValues().addPropertyValue("context", new RuntimeBeanReference(ProcessingUtil.CONTEXT_ROLE));
         beanDef.getPropertyValues().addPropertyValue("configurationInfo", new RuntimeBeanReference(ConfigurationInfo.class.getName()));
+        beanDef.getPropertyValues().addPropertyValue("resourceLoader", resourceLoader);
+        beanDef.getPropertyValues().addPropertyValue("location", this.getPropertyLocation());
 
         this.register(beanDef, AvalonBeanPostProcessor.class.getName(), registry);
     }
@@ -315,5 +317,9 @@
         if (component != null) {
             info.setDefaultType(category, component.getDefaultValue());
         }
+    }
+
+    protected String getPropertyLocation() {
+        return "WEB-INF/cocoon/xconf";
     }
 }

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonNamespaceHandler.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonNamespaceHandler.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonNamespaceHandler.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonNamespaceHandler.java Thu Oct  5 07:59:27 2006
@@ -29,7 +29,7 @@
 /**
  * Spring namespace handler for the cocoon avalon namespace.
  * Currently this namespace defines the following elements
- * (in the namespace "http://org.apache.cocoon/avalon"):
+ * (in the namespace "http://cocoon.apache.org/avalon"):
  * "avalon" : This adds all Avalon configured components to the bean factory.
  *            (Attribute location is required)
  *

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonServiceManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonServiceManager.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonServiceManager.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/AvalonServiceManager.java Thu Oct  5 07:59:27 2006
@@ -18,7 +18,6 @@
 
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.configuration.Settings;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.BeanFactoryAware;

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapElementParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapElementParser.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapElementParser.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/avalon/SitemapElementParser.java Thu Oct  5 07:59:27 2006
@@ -69,4 +69,7 @@
         return ConfigurationReader.readSitemap((ConfigurationInfo)parentContext.getBean(ConfigurationInfo.class.getName()), location, resourceLoader);
     }
 
+    protected String getPropertyLocation() {
+        return "config/xconf";
+    }
 }

Modified: cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/core/container/ContainerTestCase.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/core/container/ContainerTestCase.java?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/core/container/ContainerTestCase.java (original)
+++ cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/core/container/ContainerTestCase.java Thu Oct  5 07:59:27 2006
@@ -45,14 +45,12 @@
 import org.apache.cocoon.configuration.impl.MutableSettings;
 import org.apache.cocoon.core.container.spring.avalon.AvalonBeanPostProcessor;
 import org.apache.cocoon.core.container.spring.avalon.AvalonElementParser;
-import org.apache.cocoon.core.container.spring.avalon.ComponentInfo;
 import org.apache.cocoon.core.container.spring.avalon.ConfigurationInfo;
 import org.apache.cocoon.core.container.spring.avalon.ConfigurationReader;
 import org.apache.cocoon.environment.mock.MockContext;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.config.BeanDefinitionHolder;
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;

Modified: cocoon/trunk/tools/archetypes/cocoon-22-archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/archetypes/cocoon-22-archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/tools/archetypes/cocoon-22-archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml (original)
+++ cocoon/trunk/tools/archetypes/cocoon-22-archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml Thu Oct  5 07:59:27 2006
@@ -19,12 +19,12 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:cocoon="http://org.apache.cocoon/core"
-       xmlns:avalon="http://org.apache.cocoon/avalon"
+       xmlns:cocoon="http://cocoon.apache.org/core"
+       xmlns:avalon="http://cocoon.apache.org/avalon"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
-                           http://org.apache.cocoon/core http://cocoon.apache.org/core.xsd
-                           http://org.apache.cocoon/avalon http://cocoon.apache.org/avalon.xsd">
+                           http://cocoon.apache.org/core http://cocoon.apache.org/core.xsd
+                           http://cocoon.apache.org/avalon http://cocoon.apache.org/avalon.xsd">
 
   <!-- Load all the properties for Cocoon -->
   <cocoon:settings/>

Modified: cocoon/trunk/tools/cocoon-block-deployer/cocoon-deployer-plugin/src/main/resources/org/apache/cocoon/maven/deployer/monolithic/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/cocoon-block-deployer/cocoon-deployer-plugin/src/main/resources/org/apache/cocoon/maven/deployer/monolithic/WEB-INF/applicationContext.xml?view=diff&rev=453261&r1=453260&r2=453261
==============================================================================
--- cocoon/trunk/tools/cocoon-block-deployer/cocoon-deployer-plugin/src/main/resources/org/apache/cocoon/maven/deployer/monolithic/WEB-INF/applicationContext.xml (original)
+++ cocoon/trunk/tools/cocoon-block-deployer/cocoon-deployer-plugin/src/main/resources/org/apache/cocoon/maven/deployer/monolithic/WEB-INF/applicationContext.xml Thu Oct  5 07:59:27 2006
@@ -19,12 +19,12 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:cocoon="http://org.apache.cocoon/core"
-       xmlns:avalon="http://org.apache.cocoon/avalon"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
-                           http://org.apache.cocoon/core http://org.apache.cocoon/core.xsd
-                           http://org.apache.cocoon/avalon http://org.apache.cocoon/avalon.xsd">
+       xmlns:cocoon="http://cocoon.apache.org/core"
+       xmlns:avalon="http://cocoon.apache.org/avalon"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
+                           http://cocoon.apache.org/core http://cocoon.apache.org/core.xsd
+                           http://cocoon.apache.org/avalon http://cocoon.apache.org/avalon.xsd">
 
   <!-- Load all the properties for Cocoon -->
   <cocoon:settings/>