giacomo 01/08/30 12:15:44
Modified: src/org/apache/cocoon Cocoon.java Constants.java Main.java
src/org/apache/cocoon/acting ServerPagesAction.java
src/org/apache/cocoon/components/language/generator
GeneratorSelector.java
src/org/apache/cocoon/components/profiler Profiler.java
src/org/apache/cocoon/components/resolver Resolver.java
src/org/apache/cocoon/components/xslt XSLTProcessor.java
src/org/apache/cocoon/environment Source.java
src/org/apache/cocoon/servlet CocoonServlet.java
src/org/apache/cocoon/sitemap AbstractSitemap.java
Manager.java
src/org/apache/cocoon/xml NamespacesTable.java
src/org/apache/cocoon/xml/dom DOMBuilder.java
webapp cocoon.xconf
webapp/WEB-INF web.xml
lib junit.jar
Added: src/org/apache/cocoon/util/log CocoonTargetFactory.java
lib avalon-excalibur-dev.jar logkit-1.0b4-dev.jar
Removed: lib avalon-excalibur.jar logkit-1.0b4.jar
Log:
added initial support for the LogKit Management System
Revision Changes Path
1.1
xml-cocoon2/src/org/apache/cocoon/util/log/CocoonTargetFactory.java
Index: CocoonTargetFactory.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.cocoon.util.log;
import org.apache.avalon.excalibur.logger.factory.FileTargetFactory;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.log.format.Formatter;
/**
* CocoonTargetFactory class.
*
* This factory is able to create different LogTargets specific to Cocoon
* according to the following configuration syntax:
*
* <pre>
* <file id="foo">
* <filename>${context-key}/real-name/...</filename>
* <format type="raw|pattern|extended|xml|cocoon">pattern to be used
if needed</format>
* <append>true|false</append>
* <rotation type="revolving|unique" init="5" max="10">
* <or>
* <size>10000000</size>
* <time>24:00:00</time>
* <time>12:00:00</time>
* </or>
* </rotate>
* </file>
* </pre>
*
* <p>Some explanations about the Elements used in the configuration:</p>
* <dl>
* <dt><filename></dt>
* <dd>
* This denotes the name of the file to log to. It can be constructed
* out of entries in the passed Context object as ${context-key}.
* This element is required.
* </dd>
* <dt><format></dt>
* <dd>
* The type attribute of the pattern element denotes the type of
* Formatter to be used and according to it the pattern to use for.
* This elements defaults to:
* <p>
* %7.7{priority} %{time} [%8.8{category}] (%{uri})
%{thread}/%{class:short}: %{message}\\n%{throwable}
* </p>
* </dd>
* <dt><append><dt>
* <dd>
* If the log file should be deleted every time the logger is creates
* (normally at the start of the applcation) or not and thus the log
* entries will be appended. This elements defaults to false.
* </dd>
* <dt><rotation></dt>
* <dd>
* This is an optional element.
* The type attribute determines which FileStrategy to user
* (revolving=RevolvingFileStrategy, unique=UniqueFileStrategy).
* The required init and max attribute are used to determine the initial
and
* maximum rotation to use on a type="revolving" attribute.
* </dd>
* <dt><or></dt>
* <dd>uses the OrRotateStrategy to combine the children</dd>
* <dt><size></dt>
* <dd>
* The number of bytes if no suffix used or kilo bytes (1024) if suffixed
with
* 'k' or mega bytes (1024k) if suffixed with 'm' when a file rotation
should
* occur. It doesn't make sense to specify more than one.
* </dd>
* <dt><time></dt>
* <dd>
* The time as HH:MM:SS when a rotation should occur. If you like to rotate
* a logfile more than once a day put an <or> element immediately
after the
* <rotation> element and specify the times (and one size, too)
inside the
* <or> element.
* </dd>
* </dl>
*
* @author <a href="mailto:[EMAIL PROTECTED],org">Giacomo Pati</a>
* @version CVS $Revision: 1.1 $ $Date: 2001/08/30 19:15:43 $
* @since 4.0
*/
public class CocoonTargetFactory
extends FileTargetFactory
{
//Format of default Cocoon formatter
private static final String CFORMAT =
"%7.7{priority} %{time} [%8.8{category}] (%{uri})
%{thread}/%{class:short}: %{message}\\n%{throwable}";
//Format of default Cocoon XML formatter
private static final String XFORMAT =
"priority time category uri thread class message throwable";
protected Formatter getFormatter(final Configuration conf)
{
final String type = conf.getAttribute("type", "unknown");
if ("cocoon".equals(type))
{
final CocoonLogFormatter formatter = new CocoonLogFormatter();
final String format = conf.getValue(CFORMAT);
formatter.setFormat(format);
return formatter;
}
else if ("xml".equals(type))
{
final XMLCocoonLogFormatter formatter = new
XMLCocoonLogFormatter();
final String format = conf.getValue(XFORMAT);
formatter.setTypes(format);
return formatter;
}
// default formatter
return super.getFormatter(conf);
}
}
1.23 +23 -2 xml-cocoon2/src/org/apache/cocoon/Cocoon.java
Index: Cocoon.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Cocoon.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- Cocoon.java 2001/08/29 17:56:04 1.22
+++ Cocoon.java 2001/08/30 19:15:43 1.23
@@ -9,6 +9,8 @@
import org.apache.avalon.excalibur.component.DefaultRoleManager;
import org.apache.avalon.excalibur.component.ExcaliburComponentManager;
+import org.apache.avalon.excalibur.logger.LogKitManager;
+import org.apache.avalon.excalibur.logger.LogKitManageable;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.component.Component;
@@ -52,9 +54,18 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
(Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.22 $ $Date: 2001/08/29 17:56:04 $
+ * @version CVS $Revision: 1.23 $ $Date: 2001/08/30 19:15:43 $
*/
-public class Cocoon extends AbstractLoggable implements ThreadSafe,
Component, Initializable, Disposable, Modifiable, Processor, Contextualizable {
+public class Cocoon
+ extends AbstractLoggable
+ implements ThreadSafe,
+ Component,
+ Initializable,
+ Disposable,
+ Modifiable,
+ Processor,
+ Contextualizable,
+ LogKitManageable{
/** The application context */
private Context context;
@@ -70,6 +81,9 @@
/** The sitemap manager */
private Manager sitemapManager;
+ /** The logkit manager */
+ private LogKitManager logKitManager;
+
/** The classpath (null if not available) */
private String classpath;
@@ -109,6 +123,10 @@
}
}
+ public void setLogKitManager(LogKitManager logKitManager) {
+ this.logKitManager = logKitManager;
+ }
+
public void initialize() throws Exception {
this.componentManager = new
ExcaliburComponentManager((ClassLoader)this.context.get(Constants.CONTEXT_CLASS_LOADER));
this.componentManager.setLogger(getLogger());
@@ -126,6 +144,7 @@
ExcaliburComponentManager startupManager = new
ExcaliburComponentManager((ClassLoader)this.context.get(Constants.CONTEXT_CLASS_LOADER));
startupManager.setLogger(getLogger());
startupManager.contextualize(this.context);
+ startupManager.setLogKitManager(this.logKitManager);
try {
startupManager.addComponent(Parser.ROLE,
ClassUtils.loadClass(parser), null);
@@ -257,6 +276,7 @@
Configuration conf = this.configuration;
AbstractSitemap.setRoleManager(sitemapRoleManager, conf);
+ AbstractSitemap.setLogKitManager(this.logKitManager);
getLogger().debug("Root configuration: " + conf.getName());
if (! "cocoon".equals(conf.getName())) {
@@ -295,6 +315,7 @@
}
this.componentManager.setRoleManager(drm);
+ this.componentManager.setLogKitManager(this.logKitManager);
getLogger().debug("Setting up components...");
this.componentManager.configure(conf);
1.11 +1 -3 xml-cocoon2/src/org/apache/cocoon/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Constants.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Constants.java 2001/07/18 10:44:26 1.10
+++ Constants.java 2001/08/30 19:15:43 1.11
@@ -10,7 +10,7 @@
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.10 $ $Date: 2001/07/18 10:44:26 $
+ * @version CVS $Revision: 1.11 $ $Date: 2001/08/30 19:15:43 $
*/
public interface Constants {
@@ -70,8 +70,6 @@
String CONTEXT_CACHE_DIR = "cache-directory";
String CONTEXT_CLASSPATH = "classpath";
String CONTEXT_CONFIG_URL = "config-url";
- String CONTEXT_LOG_DIR = "log-directory";
- String CONTEXT_LOG_FILE = "log-file";
boolean DESCRIPTOR_RELOADABLE_DEFAULT = true;
1.17 +46 -35 xml-cocoon2/src/org/apache/cocoon/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Main.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- Main.java 2001/08/23 02:50:33 1.16
+++ Main.java 2001/08/30 19:15:43 1.17
@@ -12,6 +12,10 @@
import org.apache.avalon.excalibur.cli.CLOption;
import org.apache.avalon.excalibur.cli.CLOptionDescriptor;
import org.apache.avalon.excalibur.cli.CLUtil;
+import org.apache.avalon.excalibur.logger.DefaultLogKitManager;
+import org.apache.avalon.excalibur.logger.LogKitManager;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.commandline.CommandlineContext;
@@ -31,6 +35,7 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
@@ -51,7 +56,7 @@
* Command line entry point.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.16 $ $Date: 2001/08/23 02:50:33 $
+ * @version CVS $Revision: 1.17 $ $Date: 2001/08/30 19:15:43 $
*/
public class Main {
@@ -60,7 +65,8 @@
protected static final int HELP_OPT = 'h';
protected static final int VERSION_OPT = 'v';
- protected static final int LOG_URL_OPT = 'l';
+ protected static final int LOG_KIT_OPT = 'k';
+ protected static final int LOGGER_OPT = 'l';
protected static final int LOG_LEVEL_OPT = 'u';
protected static final int CONTEXT_DIR_OPT = 'c';
protected static final int DEST_DIR_OPT = 'd';
@@ -87,14 +93,18 @@
CLOptionDescriptor.ARGUMENT_DISALLOWED,
VERSION_OPT,
"print the version information and exit"),
- new CLOptionDescriptor("logUrl",
+ new CLOptionDescriptor("logKitconfig",
CLOptionDescriptor.ARGUMENT_REQUIRED,
- LOG_URL_OPT,
- "use given file for log"),
+ LOG_KIT_OPT,
+ "use given file for LogKit Management
configuration"),
+ new CLOptionDescriptor("Logger",
+ CLOptionDescriptor.ARGUMENT_REQUIRED,
+ LOGGER_OPT,
+ "use given logger category as default logger
for the Cocoon engine"),
new CLOptionDescriptor("logLevel",
CLOptionDescriptor.ARGUMENT_REQUIRED,
LOG_LEVEL_OPT,
- "choose the minimum log level for logging
(DEBUG, INFO, WARN, ERROR, FATAL_ERROR)"),
+ "choose the minimum log level for logging
(DEBUG, INFO, WARN, ERROR, FATAL_ERROR) for startup logging"),
new CLOptionDescriptor("contextDir",
CLOptionDescriptor.ARGUMENT_REQUIRED,
CONTEXT_DIR_OPT,
@@ -155,12 +165,12 @@
String workDir = Constants.DEFAULT_WORK_DIR;
List targets = new ArrayList();
CLArgsParser parser = new CLArgsParser(args, options);
- String logUrl = null;
+ String logKit = null;
+ String logger = null;
String logLevel = "DEBUG";
boolean xspOnly = false;
String userAgent = DEFAULT_USER_AGENT;
String accept = DEFAULT_ACCEPT;
- String logDir = "", logFile = "";
boolean followLinks = true;
List clOptions = parser.getArguments();
@@ -193,9 +203,13 @@
case Main.CONTEXT_DIR_OPT:
contextDir = option.getArgument();
break;
+
+ case Main.LOG_KIT_OPT:
+ logKit = option.getArgument();
+ break;
- case Main.LOG_URL_OPT:
- logUrl = option.getArgument();
+ case Main.LOGGER_OPT:
+ logger = option.getArgument();
break;
case Main.LOG_LEVEL_OPT:
@@ -224,29 +238,9 @@
}
}
- try {
- final Priority priority = Priority.getPriorityForName(logLevel);
- log = Hierarchy.getDefaultHierarchy().getLoggerFor("cocoon");
- log.setPriority(priority);
-
- // FIXME
- // The log dir and log file must be detected correct
- // This is only a simple hack to make the sitemap manager happy
- if(logUrl == null) {
- log.setLogTargets( new LogTarget[] {new
DefaultOutputLogTarget(System.out)});
- logDir = "";
- logFile = "";
- } else {
- log.setLogTargets(new LogTarget[] {new
FileOutputLogTarget(logUrl)});
- logFile = logUrl;
- logDir = "";
- }
- } catch (MalformedURLException mue) {
- String error = "Cannot write on the specified log file. Please,
make sure the path exists and you have write permissions.";
- Hierarchy.getDefaultHierarchy().log(error, mue);
- System.out.println(error);
- System.exit(1);
- }
+ final Priority priority = Priority.getPriorityForName(logLevel);
+ Hierarchy.getDefaultHierarchy().setDefaultPriority(priority);
+ log = Hierarchy.getDefaultHierarchy().getLoggerFor("");
if (destDir.equals("")) {
String error = "Careful, you must specify a destination dir when
using the -d/--destDir argument";
@@ -288,17 +282,34 @@
CommandlineContext clContext = new
CommandlineContext(contextDir);
clContext.setLogger(log);
appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, clContext);
+ DefaultLogKitManager logKitManager = null;
+ if(logKit != null) {
+ final FileInputStream fis = new FileInputStream(logKit);
+ final DefaultConfigurationBuilder builder = new
DefaultConfigurationBuilder();
+ final Configuration logKitConf = builder.build(fis);
+ logKitManager = new DefaultLogKitManager();
+ logKitManager.setLogger(log);
+ final DefaultContext subcontext = new
DefaultContext(appContext);
+ subcontext.put("context-root", contextDir);
+ logKitManager.contextualize(subcontext);
+ logKitManager.configure(logKitConf);
+ logKitManager = logKitManager;
+ if (logger != null) {
+ log = logKitManager.getLogger(logger);
+ } else {
+ log = logKitManager.getLogger("cocoon");
+ }
+ }
appContext.put(Constants.CONTEXT_CLASSPATH,
getClassPath(contextDir));
appContext.put(Constants.CONTEXT_WORK_DIR, work);
appContext.put(Constants.CONTEXT_UPLOAD_DIR, contextDir +
"image-dir");
File cacheDir = getDir(workDir + File.separator + "cache-dir",
"cache");
appContext.put(Constants.CONTEXT_CACHE_DIR, cacheDir);
appContext.put(Constants.CONTEXT_CONFIG_URL, conf.toURL());
- appContext.put(Constants.CONTEXT_LOG_DIR, logDir);
- appContext.put(Constants.CONTEXT_LOG_FILE, logFile);
Cocoon c = new Cocoon();
c.setLogger(log);
c.contextualize(appContext);
+ c.setLogKitManager(logKitManager);
c.initialize();
Main main = new Main(c, context, dest);
main.userAgent = userAgent;
1.6 +16 -5
xml-cocoon2/src/org/apache/cocoon/acting/ServerPagesAction.java
Index: ServerPagesAction.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/acting/ServerPagesAction.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ServerPagesAction.java 2001/08/24 10:03:45 1.5
+++ ServerPagesAction.java 2001/08/30 19:15:43 1.6
@@ -8,6 +8,8 @@
package org.apache.cocoon.acting;
import org.apache.avalon.excalibur.component.ComponentHandler;
+import org.apache.avalon.excalibur.logger.LogKitManageable;
+import org.apache.avalon.excalibur.logger.LogKitManager;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -59,14 +61,18 @@
* </pre>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Revision: 1.5 $ $Date: 2001/08/24 10:03:45 $
+ * @version CVS $Revision: 1.6 $ $Date: 2001/08/30 19:15:43 $
*/
-public class ServerPagesAction extends ConfigurableComposerAction implements
Disposable, ThreadSafe {
+public class ServerPagesAction
+ extends ConfigurableComposerAction
+ implements Disposable, ThreadSafe, LogKitManageable {
public static final String REDIRECTOR_OBJECT = "xsp-action:redirector";
public static final String ACTION_RESULT_OBJECT = "xsp-action:result";
public static final String ACTION_SUCCESS_OBJECT = "xsp-action:success";
-
+
+ private LogKitManager logKitManager;
+
ComponentHandler generatorHandler;
public void configure(Configuration conf)
@@ -77,7 +83,8 @@
conf,
this.manager,
null, // Context
- null // RoleManager
+ null, // RoleManager
+ this.logKitManager // LogKitManager
);
this.generatorHandler.setLogger(getLogger());
@@ -87,7 +94,11 @@
throw new ConfigurationException("Cannot set up component
handler", e);
}
}
-
+
+ public void setLogKitManager(LogKitManager logKitManager) {
+ this.logKitManager = logKitManager;
+ }
+
public void dispose() {
if (this.generatorHandler != null) {
this.generatorHandler.dispose();
1.9 +14 -5
xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java
Index: GeneratorSelector.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- GeneratorSelector.java 2001/08/20 13:55:10 1.8
+++ GeneratorSelector.java 2001/08/30 19:15:43 1.9
@@ -10,6 +10,7 @@
import org.apache.avalon.excalibur.component.ComponentHandler;
import org.apache.avalon.excalibur.component.ExcaliburComponentSelector;
import org.apache.avalon.excalibur.component.RoleManager;
+import org.apache.avalon.excalibur.logger.LogKitManager;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
@@ -31,7 +32,7 @@
* includes Sitemaps and XSP Pages
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.8 $ $Date: 2001/08/20 13:55:10 $
+ * @version CVS $Revision: 1.9 $ $Date: 2001/08/30 19:15:43 $
*/
public class GeneratorSelector extends ExcaliburComponentSelector implements
Disposable {
@@ -40,12 +41,14 @@
private ClassLoaderManager classManager;
/** The component manager */
- protected ComponentManager manager = null;
+ protected ComponentManager manager;
- protected Context context = null;
+ private LogKitManager logKitManager;
- protected RoleManager roles = null;
+ protected Context context;
+ protected RoleManager roles;
+
protected Map componentHandlers = new HashMap();
/** Dynamic component handlers mapping. */
@@ -61,6 +64,11 @@
this.roles = roleMgr;
}
+ public void setLogKitManager(LogKitManager logKitMgr) {
+ super.setLogKitManager(logKitMgr);
+ this.logKitManager = logKitMgr;
+ }
+
public void compose (ComponentManager manager) throws ComponentException
{
super.compose(manager);
this.manager = manager;
@@ -128,7 +136,8 @@
new
DefaultConfiguration("", "GeneratorSelector"),
newManager,
this.context,
- this.roles );
+ this.roles,
+ this.logKitManager );
handler.setLogger( getLogger() );
handler.initialize();
1.4 +8 -8
xml-cocoon2/src/org/apache/cocoon/components/profiler/Profiler.java
Index: Profiler.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/profiler/Profiler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Profiler.java 2001/08/20 13:55:12 1.3
+++ Profiler.java 2001/08/30 19:15:43 1.4
@@ -15,18 +15,18 @@
* Profiler component interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
- * @version CVS $Revision: 1.3 $ $Date: 2001/08/20 13:55:12 $
+ * @version CVS $Revision: 1.4 $ $Date: 2001/08/30 19:15:43 $
*/
public interface Profiler extends Component
{
String ROLE = "org.apache.cocoon.components.profiler.Profiler";
- public void clearResults();
- public void clearResult(Object key);
+ void clearResults();
+ void clearResult(Object key);
- public void addResult(String uri, ProfilerData data);
+ void addResult(String uri, ProfilerData data);
- public Collection getResultKeys();
- public Collection getResults();
- public ProfilerResult getResult(Object key);
-}
\ No newline at end of file
+ Collection getResultKeys();
+ Collection getResults();
+ ProfilerResult getResult(Object key);
+}
1.2 +2 -2
xml-cocoon2/src/org/apache/cocoon/components/resolver/Resolver.java
Index: Resolver.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/resolver/Resolver.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Resolver.java 2001/08/20 12:36:59 1.1
+++ Resolver.java 2001/08/30 19:15:43 1.2
@@ -18,7 +18,7 @@
* A component that uses catalogs for resolving Entities.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
- * @version CVS $Revision: 1.1 $ $Date: 2001/08/20 12:36:59 $
+ * @version CVS $Revision: 1.2 $ $Date: 2001/08/30 19:15:43 $
*/
public interface Resolver extends Component, EntityResolver {
@@ -58,7 +58,7 @@
* or Reader for the InputSource.
* @see org.xml.sax.InputSource
*/
- public abstract InputSource resolveEntity(String publicId,
+ InputSource resolveEntity(String publicId,
String systemId)
throws SAXException, IOException;
}
1.4 +4 -4
xml-cocoon2/src/org/apache/cocoon/components/xslt/XSLTProcessor.java
Index: XSLTProcessor.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/xslt/XSLTProcessor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XSLTProcessor.java 2001/08/25 19:40:32 1.3
+++ XSLTProcessor.java 2001/08/30 19:15:43 1.4
@@ -38,7 +38,7 @@
*
* @param resolver a <code>SourceResolver</code> value
*/
- public void setSourceResolver(SourceResolver resolver);
+ void setSourceResolver(SourceResolver resolver);
/**
* <p>Return a <code>TransformerHandler</code> for a given
@@ -59,7 +59,7 @@
* @return a <code>TransformerHandler</code> value
* @exception ProcessingException if an error occurs
*/
- public TransformerHandler getTransformerHandler(Source stylesheet,
+ TransformerHandler getTransformerHandler(Source stylesheet,
XMLFilter filter)
throws ProcessingException;
@@ -72,7 +72,7 @@
* @exception ProcessingException if an error occurs
* @see org.apache.cocoon.transformation.TraxTransformer#setConsumer
*/
- public TransformerHandler getTransformerHandler(Source stylesheet)
+ TransformerHandler getTransformerHandler(Source stylesheet)
throws ProcessingException;
/**
@@ -89,7 +89,7 @@
* @param result a <code>Result</code> value
* @exception ProcessingException if an error occurs
*/
- public void transform(Source source, Source stylesheet, Parameters params,
+ void transform(Source source, Source stylesheet, Parameters params,
Result result)
throws ProcessingException;
}
1.12 +6 -6 xml-cocoon2/src/org/apache/cocoon/environment/Source.java
Index: Source.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/Source.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- Source.java 2001/08/25 19:40:32 1.11
+++ Source.java 2001/08/30 19:15:43 1.12
@@ -25,7 +25,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a>
- * @version CVS $Revision: 1.11 $ $Date: 2001/08/25 19:40:32 $
+ * @version CVS $Revision: 1.12 $ $Date: 2001/08/30 19:15:43 $
*/
public interface Source extends Recyclable, XMLizable {
@@ -33,18 +33,18 @@
* Get the last modification date of the source or 0 if it
* is not possible to determine the date.
*/
- public long getLastModified();
+ long getLastModified();
/**
* Get the content length of the source or -1 if it
* is not possible to determine the length.
*/
- public long getContentLength();
+ long getContentLength();
/**
* Return an <code>InputStream</code> object to read from the source.
*/
- public InputStream getInputStream()
+ InputStream getInputStream()
throws ProcessingException, IOException;
/**
@@ -55,11 +55,11 @@
* @exception ProcessingException if an error occurs
* @exception IOException if an error occurs
*/
- public InputSource getInputSource()
+ InputSource getInputSource()
throws ProcessingException, IOException;
/**
* Return the unique identifer for this source
*/
- public String getSystemId();
+ String getSystemId();
}
1.35 +48 -60
xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- CocoonServlet.java 2001/08/20 19:01:34 1.34
+++ CocoonServlet.java 2001/08/30 19:15:43 1.35
@@ -7,6 +7,10 @@
*****************************************************************************/
package org.apache.cocoon.servlet;
+import org.apache.avalon.excalibur.logger.DefaultLogKitManager;
+import org.apache.avalon.excalibur.logger.LogKitManager;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.cocoon.Cocoon;
import org.apache.cocoon.ConnectionResetException;
@@ -41,6 +45,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
@@ -57,12 +62,13 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.34 $ $Date: 2001/08/20 19:01:34 $
+ * @version CVS $Revision: 1.35 $ $Date: 2001/08/30 19:15:43 $
*/
public class CocoonServlet extends HttpServlet {
protected Logger log;
+ protected LogKitManager logKitManager;
static final float second = 1000;
static final float minute = 60 * second;
@@ -323,70 +329,47 @@
*/
private void initLogger()
throws ServletException {
- final Priority logPriority;
- String logDir = getInitParameter("log-dir");
String logLevel = getInitParameter("log-level");
- String logFormat = getInitParameter("log-format");
- if (logLevel != null) {
- logLevel.trim();
+ if (logLevel == null) {
+ logLevel = "INFO";
}
- if (logDir == null) {
- if(this.servletContext.getRealPath("/") != null) {
- logDir = this.servletContext.getRealPath("/");
- if (logDir.endsWith(File.separator) == false) logDir +=
File.separator;
- logDir = logDir +
"WEB-INF"+File.separator+"logs"+File.separator;
- } else
- logDir =
"."+File.separator+"WEB-INF"+File.separator+"logs"+File.separator;
- }
+ final Priority logPriority =
Priority.getPriorityForName(logLevel.trim());
- this.appContext.put(Constants.CONTEXT_LOG_DIR, logDir);
+ final ServletOutputLogTarget servTarget = new
ServletOutputLogTarget(this.servletContext);
- if (logLevel != null) {
- logPriority = Priority.getPriorityForName(logLevel);
- } else {
- logPriority = Priority.ERROR;
- }
+ final CocoonLogFormatter formatter = new CocoonLogFormatter();
+ formatter.setFormat( "%7.7{priority} %{time} [%8.8{category}] " +
+ "(%{uri}) %{thread}/%{class:short}:
%{message}\\n%{throwable}" );
- try {
- String logName = getInitParameter("log-name");
- if (logName == null) {
- logName = "cocoon.log";
- }
+ servTarget.setFormatter(formatter);
+ Hierarchy.getDefaultHierarchy().setDefaultLogTarget(servTarget);
+ Hierarchy.getDefaultHierarchy().setDefaultPriority(logPriority);
+ final Logger logger =
Hierarchy.getDefaultHierarchy().getLoggerFor("");
- this.appContext.put(Constants.CONTEXT_LOG_FILE, logName);
-
- String value = getInitParameter("log-append");
- boolean logAppend = (value == null ||
value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("true"));
-
- final String path = logDir + logName;
- Formatter formatter;
- if (logFormat == null || logFormat.equalsIgnoreCase("xml") ==
false) {
- final CocoonLogFormatter cf = new CocoonLogFormatter();
- cf.setFormat( "%7.7{priority} %{time} [%8.8{category}] " +
- "(%{uri}) %{thread}/%{class:short}:
%{message}\\n%{throwable}" );
- formatter = cf;
- } else {
- final XMLCocoonLogFormatter cf = new XMLCocoonLogFormatter();
- cf.setTypes("priority time category uri thread class message
throwable");
- formatter = cf;
+ try {
+ final String logkitConfig = getInitParameter("logkit-config");
+
+ //Configure the logkit management
+ if (logkitConfig != null) {
+ final FileInputStream fis = new
FileInputStream(this.servletContext.getRealPath("/") + logkitConfig);
+ final DefaultConfigurationBuilder builder = new
DefaultConfigurationBuilder();
+ final Configuration conf = builder.build(fis);
+ final DefaultLogKitManager logKitManager = new
DefaultLogKitManager();
+ logKitManager.setLogger(logger);
+ final DefaultContext subcontext = new
DefaultContext(this.appContext);
+ subcontext.put("servlet-context", this.servletContext);
+ subcontext.put("context-root",
this.servletContext.getRealPath("/"));
+ logKitManager.contextualize(subcontext);
+ logKitManager.configure(conf);
+ this.logKitManager = logKitManager;
+ final String cocoonLogger =
getInitParameter("servlet-logger");
+ if (cocoonLogger != null) {
+ this.log = logKitManager.getLogger(cocoonLogger);
+ } else {
+ this.log = logKitManager.getLogger("cocoon");
+ }
}
- this.log =
Hierarchy.getDefaultHierarchy().getLoggerFor("cocoon");
- this.log.setPriority(logPriority);
-
- FileTarget fileTarget = new FileTarget(new File(path),
logAppend, formatter);
- ServletOutputLogTarget servTarget = new
ServletOutputLogTarget(this.servletContext);
-
- servTarget.setFormatter(formatter);
-
- PriorityFilter filter = new PriorityFilter(Priority.ERROR);
- filter.addTarget( servTarget );
- LogTarget[] targets = new LogTarget[] { fileTarget, filter };
- this.log.setLogTargets( targets );
-
- if (logAppend)
- this.log.info("Appending to previous log file, if existing");
-
} catch (Exception e) {
Hierarchy.getDefaultHierarchy().log("Could not set up Cocoon
Logger, will use screen instead", e);
}
@@ -446,8 +429,7 @@
try {
log.debug("Trying to load class: " + fqcn);
ClassUtils.loadClass(fqcn).newInstance();
- } catch (Exception e) {
- log.warn("Could not force-load class: " + fqcn, e);
+ } catch (Exception e) { log.warn("Could
not force-load class: " + fqcn, e);
// Do not throw an exception, because it is not a fatal
error.
}
}
@@ -681,8 +663,14 @@
URL configFile = (URL)
this.appContext.get(Constants.CONTEXT_CONFIG_URL);
log.info("Reloading from: " + configFile.toExternalForm());
Cocoon c = (Cocoon)
ClassUtils.newInstance("org.apache.cocoon.Cocoon");
+ final String rootlogger = getInitParameter("cocoon-logger");
+ if (rootlogger != null) {
+ c.setLogger(this.logKitManager.getLogger(rootlogger));
+ } else {
+ c.setLogger(log);
+ }
c.contextualize(this.appContext);
- c.setLogger(this.log);
+ c.setLogKitManager(this.logKitManager);
c.initialize();
this.creationTime = new Date().getTime();
1.17 +12 -1
xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java
Index: AbstractSitemap.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- AbstractSitemap.java 2001/08/20 13:55:17 1.16
+++ AbstractSitemap.java 2001/08/30 19:15:43 1.17
@@ -10,6 +10,7 @@
import org.apache.avalon.excalibur.component.ExcaliburComponentManager;
import org.apache.avalon.excalibur.component.RoleManager;
+import org.apache.avalon.excalibur.logger.LogKitManager;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
@@ -46,12 +47,13 @@
* Base class for generated <code>Sitemap</code> classes
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.16 $ $Date: 2001/08/20 13:55:17 $
+ * @version CVS $Revision: 1.17 $ $Date: 2001/08/30 19:15:43 $
*/
public abstract class AbstractSitemap extends AbstractLoggable implements
Sitemap, Disposable, ThreadSafe {
private Context context;
private static final int BYTE_ARRAY_SIZE = 1024;
private static RoleManager roleManager;
+ private static LogKitManager logKitManager;
private static Configuration defaultConfig;
/** The component manager instance */
@@ -82,6 +84,13 @@
}
/**
+ * Set the logkit manager
+ */
+ public static void setLogKitManager(LogKitManager logkit) {
+ AbstractSitemap.logKitManager = logkit;
+ }
+
+ /**
* Set the current <code>ComponentManager</code> instance used by this
* <code>Composable</code>.
*/
@@ -90,6 +99,7 @@
this.manager.setLogger(getLogger());
this.manager.contextualize(this.context);
this.manager.setRoleManager(AbstractSitemap.roleManager);
+ this.manager.setLogKitManager(AbstractSitemap.logKitManager);
try {
if (AbstractSitemap.defaultConfig != null) {
@@ -150,6 +160,7 @@
selector.setLogger(getLogger());
selector.contextualize(this.context);
selector.setRoleManager(AbstractSitemap.roleManager);
+ selector.setLogKitManager(AbstractSitemap.logKitManager);
selector.compose(this.manager);
}
1.13 +17 -8 xml-cocoon2/src/org/apache/cocoon/sitemap/Manager.java
Index: Manager.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/Manager.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Manager.java 2001/08/28 16:51:38 1.12
+++ Manager.java 2001/08/30 19:15:43 1.13
@@ -9,6 +9,8 @@
package org.apache.cocoon.sitemap;
import org.apache.avalon.excalibur.component.RoleManager;
+import org.apache.avalon.excalibur.logger.LogKitManageable;
+import org.apache.avalon.excalibur.logger.LogKitManager;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
@@ -34,9 +36,11 @@
* checking regeneration of the sub <code>Sitemap</code>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.12 $ $Date: 2001/08/28 16:51:38 $
+ * @version CVS $Revision: 1.13 $ $Date: 2001/08/30 19:15:43 $
*/
-public class Manager extends AbstractLoggable implements Component,
Configurable, Composable, Contextualizable, ThreadSafe {
+public class Manager
+ extends AbstractLoggable
+ implements Component, Configurable, Composable, Contextualizable,
ThreadSafe, LogKitManageable {
private Context context;
/** The vectors of sub sitemaps */
@@ -51,9 +55,10 @@
/** The sitemap role manager */
private RoleManager sitemapRoles;
- /** The log file path */
- private String logFilePath;
+ /** The sitemap logkit manager */
+ private LogKitManager sitemapLogKitManager;
+
/**
* Set the role manager
*/
@@ -61,6 +66,13 @@
this.sitemapRoles = roles;
}
+ /**
+ * Set the logkit manager
+ */
+ public void setLogKitManager(LogKitManager logkit) {
+ this.sitemapLogKitManager = logkit;
+ }
+
/** get a configuration
* @param conf the configuration
*/
@@ -73,9 +85,6 @@
*/
public void contextualize(Context context) throws ContextException {
this.context = context;
- String logDir = (String)
context.get(org.apache.cocoon.Constants.CONTEXT_LOG_DIR);
- String logFile = (String)
context.get(org.apache.cocoon.Constants.CONTEXT_LOG_FILE);
- logFilePath = logDir + logFile;
}
/** get a component manager
@@ -206,7 +215,7 @@
String source) throws Exception {
if (!sitemapHandler.available()) {
throw new ProcessingException("The sitemap handler's sitemap
is not available. " +
- "Please check "+ logFilePath +" for the exact error.",
+ "Please check logs for the exact error.",
sitemapHandler.getException());
}
}
1.2 +3 -3
xml-cocoon2/src/org/apache/cocoon/xml/NamespacesTable.java
Index: NamespacesTable.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/xml/NamespacesTable.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NamespacesTable.java 2001/05/09 20:49:30 1.1
+++ NamespacesTable.java 2001/08/30 19:15:43 1.2
@@ -16,7 +16,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
- * @version CVS $Revision: 1.1 $ $Date: 2001/05/09 20:49:30 $
+ * @version CVS $Revision: 1.2 $ $Date: 2001/08/30 19:15:43 $
*/
public class NamespacesTable {
/** The initial namespace declaration. */
@@ -284,7 +284,7 @@
* A namespace-aware name. (This interface is used in conjunction
* with <code>NamespacesTable</code>).
*/
- public static interface Name {
+ public interface Name {
/** Return the namespace URI. */
String getUri();
/** Return the namespace prefix. */
@@ -299,7 +299,7 @@
* A namespace declaration. (This interface is used in conjunction
* with <code>NamespacesTable</code>).
*/
- public static interface Declaration {
+ public interface Declaration {
/** Return the namespace URI. */
String getUri();
/** Return the namespace prefix. */
1.4 +2 -2 xml-cocoon2/src/org/apache/cocoon/xml/dom/DOMBuilder.java
Index: DOMBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/xml/dom/DOMBuilder.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DOMBuilder.java 2001/08/20 13:55:19 1.3
+++ DOMBuilder.java 2001/08/30 19:15:43 1.4
@@ -33,7 +33,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
- * @version CVS $Revision: 1.3 $ $Date: 2001/08/20 13:55:19 $
+ * @version CVS $Revision: 1.4 $ $Date: 2001/08/30 19:15:43 $
*/
public class DOMBuilder implements XMLConsumer, Loggable {
protected Logger log;
@@ -584,7 +584,7 @@
* The Listener interface must be implemented by those objects willing to
* be notified of a successful DOM tree generation.
*/
- public static interface Listener {
+ public interface Listener {
/**
* Receive notification of a successfully completed DOM tree
generation.
1.30 +4 -4 xml-cocoon2/webapp/cocoon.xconf
Index: cocoon.xconf
===================================================================
RCS file: /home/cvs/xml-cocoon2/webapp/cocoon.xconf,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- cocoon.xconf 2001/08/25 19:40:33 1.29
+++ cocoon.xconf 2001/08/30 19:15:44 1.30
@@ -32,7 +32,7 @@
(1 is the lowest priority and 10 is the highest).
filesystem: Turns the filesystem storage for objects on or off.
-->
- <store class="org.apache.cocoon.components.store.MRUMemoryStore">
+ <store class="org.apache.cocoon.components.store.MRUMemoryStore"
logger="root.store">
<parameter name="freememory" value="1000000"/>
<parameter name="heapsize" value="60000000"/>
<parameter name="cleanupthreadinterval" value="10"/>
@@ -42,7 +42,7 @@
<parameter name="filesystem" value="true"/>
</store>
- <xslt-processor
class="org.apache.cocoon.components.xslt.XSLTProcessorImpl">
+ <xslt-processor
class="org.apache.cocoon.components.xslt.XSLTProcessorImpl" logger="root.xslt">
<parameter name="use-store" value="true"/>
</xslt-processor>
@@ -261,7 +261,7 @@
(1 is the lowest priority and 10 is the highest).
filesystem: Turns the filesystem storage for objects on or off.
-->
- <stream-cache class="org.apache.cocoon.components.store.MRUMemoryStore">
+ <stream-cache class="org.apache.cocoon.components.store.MRUMemoryStore"
logger="root.store">
<parameter name="freememory" value="1000000"/>
<parameter name="heapsize" value="60000000"/>
<parameter name="cleanupthreadinterval" value="10"/>
@@ -296,7 +296,7 @@
(1 is the lowest priority and 10 is the highest).
filesystem: Turns the filesystem storage for objects on or off.
-->
- <event-cache class="org.apache.cocoon.components.store.MRUMemoryStore">
+ <event-cache class="org.apache.cocoon.components.store.MRUMemoryStore"
logger="root.store">
<parameter name="freememory" value="1000000"/>
<parameter name="heapsize" value="60000000"/>
<parameter name="cleanupthreadinterval" value="10"/>
1.11 +28 -43 xml-cocoon2/webapp/WEB-INF/web.xml
Index: web.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/webapp/WEB-INF/web.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- web.xml 2001/08/18 18:15:37 1.10
+++ web.xml 2001/08/30 19:15:44 1.11
@@ -49,64 +49,49 @@
</init-param>
<!--
- This parameter indicates the log level to use throughout the system
-
- Available levels are:
- DEBUG: prints all level of log messages.
- INFO: prints all level of log messages except DEBUG ones.
- WARN: prints all level of log messages except DEBUG and INFO
ones.
- ERROR: prints all level of log messages except DEBUG, INFO
and WARN ones.
- FATAL-ERROR: prints only log messages of this level
+ This parameter indicates the configuration file of the LogKit
management
-->
<init-param>
- <param-name>log-level</param-name>
- <param-value>DEBUG</param-value>
+ <param-name>logkit-config</param-name>
+ <param-value>/WEB-INF/logkit.xconf</param-value>
</init-param>
<!--
- This parameter indicates the directory where Cocoon should put the log
file.
- Note that this path must be specified as an absolute path into your
filesystem
- and it is not rooted at the servlets context path. Also note that the
path
- must end with a file separator character.
- The default location is in the servlets context root at /WEB-INF/logs/.
-
+ This parameter indicates the category id of the logger from the LogKit
+ configuration used by the CocoonServlet.
+ -->
<init-param>
- <param-name>log-dir</param-name>
- <param-value>/WEB-INF/logs</param-value>
+ <param-name>servlet-logger</param-name>
+ <param-value>root</param-value>
</init-param>
- -->
<!--
- This parameter specifies the name of the log file to use. It will be
created in
- the log-dir mentioned above.
- The default name is "cocoon.log".
-
- <init-param>
- <param-name>log-name</param-name>
- <param-value>cocoon.log</param-value>
- </init-param>
+ This parameter indicates the category id of the logger from the LogKit
+ management configuration for the Cocoon engine.
+ This logger is used for all components described in the cocoon.xconf
+ and sitemap.xmap file not having specified a logger with the
+ logger="..." attribute in the component configuration file.
-->
-
- <!--
- This parameter specifies the format of the log. You can choose between
xml
- and text, default is text.
-
<init-param>
- <param-name>log-format</param-name>
- <param-value>xml</param-value>
+ <param-name>cocoon-logger</param-name>
+ <param-value>cocoon</param-value>
</init-param>
- -->
-
- <!--
- This boolean value parameter specifies whether the cocoon log file
- should be appended to or not.
+ <!--
+ This parameter indicates the log level to use throughout startup of
the system
+
+ Available levels are:
+ DEBUG: prints all level of log messages.
+ INFO: prints all level of log messages except DEBUG ones.
+ WARN: prints all level of log messages except DEBUG and INFO
ones.
+ ERROR: prints all level of log messages except DEBUG, INFO
and WARN ones.
+ FATAL-ERROR: prints only log messages of this level
+ -->
<init-param>
- <param-name>log-append</param-name>
- <param-value>true</param-value>
+ <param-name>log-level</param-name>
+ <param-value>DEBUG</param-value>
</init-param>
- -->
-
+
<!--
Allow reinstantiating (reloading) of the cocoon instance. If this is
set to "yes" or "true", a new cocoon instance can be created using
1.2 +346 -520 xml-cocoon2/lib/junit.jar
<<Binary file>>
1.1 xml-cocoon2/lib/avalon-excalibur-dev.jar
<<Binary file>>
1.1 xml-cocoon2/lib/logkit-1.0b4-dev.jar
<<Binary file>>
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]