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/>