You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2004/09/09 04:29:47 UTC
svn commit: rev 43562 - in cocoon/trunk/src/java/org/apache/cocoon/components: container flow flow/util source/impl
Author: vgritsenko
Date: Wed Sep 8 19:29:46 2004
New Revision: 43562
Modified:
cocoon/trunk/src/java/org/apache/cocoon/components/container/CocoonComponentManager.java
cocoon/trunk/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java
cocoon/trunk/src/java/org/apache/cocoon/components/flow/util/PipelineUtil.java
cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Log:
pipelineutil: close input stream
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/container/CocoonComponentManager.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/container/CocoonComponentManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/container/CocoonComponentManager.java Wed Sep 8 19:29:46 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -40,17 +40,16 @@
*
* @author <a href="mailto:bluetkemeier@s-und-n.de">Björn Lütkemeier</a>
* @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
- * @version CVS $Id: CocoonComponentManager.java,v 1.3 2004/07/14 19:39:10 cziegeler Exp $
+ * @version CVS $Id$
*/
-public final class CocoonComponentManager
-extends ExcaliburComponentManager {
-
+public final class CocoonComponentManager extends ExcaliburComponentManager {
+
/** The {@link SitemapConfigurationHolder}s */
private Map sitemapConfigurationHolders = new HashMap(15);
-
+
/** The parent component manager for implementing parent aware components */
private ComponentManager parentManager;
-
+
/** Temporary list of parent-aware components. Will be null for most of
* our lifecycle. */
private ArrayList parentAwareComponents = new ArrayList();
@@ -67,13 +66,13 @@
/** Create the ComponentManager with a Classloader and parent ComponentManager */
public CocoonComponentManager(final ComponentManager manager, final ClassLoader loader) {
- super( manager, loader );
+ super(manager, loader);
this.parentManager = manager;
}
/** Create the ComponentManager with a parent ComponentManager */
public CocoonComponentManager(final ComponentManager manager) {
- super( manager);
+ super(manager);
this.parentManager = manager;
}
@@ -82,9 +81,10 @@
* Fully Qualified Name(FQN)--unless there are multiple Components for the same Role. In that
* case, the Role's FQN is appended with "Selector", and we return a ComponentSelector.
*/
- public Component lookup( final String role )
+ public Component lookup(final String role)
throws ComponentException {
- if( null == role ) {
+
+ if(null == role) {
final String message =
"ComponentLocator Attempted to retrieve component with null role.";
@@ -96,7 +96,7 @@
// FIXME: how can we prevent that this is called over and over again?
SitemapConfigurationHolder holder;
-
+
holder = (SitemapConfigurationHolder)this.sitemapConfigurationHolders.get( role );
if ( null == holder ) {
// create new holder
@@ -110,6 +110,7 @@
throw new ComponentException(role, "Exception during setup of SitemapConfigurable.", ce);
}
}
+
return component;
}
@@ -117,7 +118,8 @@
* @see org.apache.avalon.excalibur.component.ExcaliburComponentManager#addComponent(java.lang.String, java.lang.Class, org.apache.avalon.framework.configuration.Configuration)
*/
public void addComponent(String role, Class clazz, Configuration conf)
- throws ComponentException {
+ throws ComponentException {
+
super.addComponent(role, clazz, conf);
// Note that at this point, we're not initialized and cannot do
// lookups, so defer parental introductions to initialize().
@@ -126,10 +128,9 @@
}
}
- public void initialize()
- throws Exception
- {
+ public void initialize() throws Exception {
super.initialize();
+
if (parentAwareComponents == null) {
throw new ComponentException(null, "CocoonComponentManager already initialized");
}
@@ -154,4 +155,3 @@
parentAwareComponents = null; // null to save memory, and catch logic bugs.
}
}
-
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java Wed Sep 8 19:29:46 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -53,18 +53,18 @@
*
* @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
* @since March 15, 2002
- * @version CVS $Id: AbstractInterpreter.java,v 1.22 2004/07/07 05:56:04 sylvain Exp $
+ * @version CVS $Id$
*/
public abstract class AbstractInterpreter extends AbstractLogEnabled
implements Component, Serviceable, Contextualizable, Interpreter,
SingleThreaded, Configurable, Disposable
{
- // The instance counters, used to produce unique IDs
+ // The instance counters, used to produce unique IDs
private static int instanceCounter = 0;
-
+
// The instance ID of this interpreter, used to identify user scopes
private String instanceID;
-
+
protected org.apache.avalon.framework.context.Context avalonContext;
/**
@@ -75,7 +75,7 @@
protected org.apache.cocoon.environment.Context context;
protected ServiceManager manager;
protected ContinuationsManager continuationsMgr;
-
+
/**
* Whether reloading of scripts should be done. Specified through
* the "reload-scripts" attribute in <code>flow.xmap</code>.
@@ -94,11 +94,11 @@
this.instanceID = String.valueOf(instanceCounter);
}
}
-
+
/**
* Get the unique ID for this interpreter, which can be used to distinguish user value scopes
* attached to the session.
- *
+ *
* @return a unique ID for this interpreter
*/
protected String getInterpreterID() {
@@ -179,8 +179,7 @@
* @exception Exception If an error occurs.
*/
public void process(String uri, Object biz, OutputStream out)
- throws Exception
- {
+ throws Exception {
// FIXME (SW): should we deprecate this method in favor of PipelineUtil?
PipelineUtil pipeUtil = new PipelineUtil();
try {
@@ -195,8 +194,7 @@
public void forwardTo(String uri, Object bizData,
WebContinuation continuation,
Redirector redirector)
- throws Exception
- {
+ throws Exception {
if (SourceUtil.indexOfSchemeColon(uri) == -1) {
uri = "cocoon:/" + uri;
Map objectModel = ContextHelper.getObjectModel(this.avalonContext);
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/flow/util/PipelineUtil.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/flow/util/PipelineUtil.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/flow/util/PipelineUtil.java Wed Sep 8 19:29:46 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -42,12 +42,12 @@
* Utility class to process a pipeline to various destinations.
* This class must be setup from the flowscript before being used. This means that instances must
* be created with <code>cocoon.createObject(Packages.org.apache.cocoon.components.flow.util.PipelineUtil);
- *
+ *
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
- * @version CVS $Id: PipelineUtil.java,v 1.3 2004/05/04 11:54:35 cziegeler Exp $
+ * @version CVS $Id$
*/
public class PipelineUtil implements Contextualizable, Serviceable, Disposable {
-
+
private Context context;
private ServiceManager manager;
private SourceResolver resolver;
@@ -56,23 +56,23 @@
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
public void dispose() {
- if ( this.manager != null ) {
- this.manager.release( this.resolver );
+ if (this.manager != null) {
+ this.manager.release(this.resolver);
this.manager = null;
this.resolver = null;
}
}
-
+
public void contextualize(Context context) throws ContextException {
this.context = context;
-
+
}
public void service(ServiceManager manager) throws ServiceException {
this.manager = manager;
this.resolver = (SourceResolver)manager.lookup(SourceResolver.ROLE);
}
-
+
/**
* Check that this object has been correctly set up.
*
@@ -80,36 +80,42 @@
*/
private void checkSetup() {
if (this.manager == null) {
- throw new IllegalStateException("Instances of " + this.getClass().getName() +
- " must be setup using either cocoon.createObject() or cocoon.setupObject().");
+ throw new IllegalStateException("Instances of " + getClass().getName() +
+ " must be setup using either cocoon.createObject() or cocoon.setupObject().");
}
}
-
+
/**
* Process a pipeline to a stream.
- *
+ *
* @param uri the pipeline URI
* @param viewData the view data object
* @param output the stream where pipeline result is output. Note: this stream is not closed.
* @throws IOException
*/
- public void processToStream(String uri, Object viewData, OutputStream output) throws IOException {
+ public void processToStream(String uri, Object viewData, OutputStream output)
+ throws IOException {
checkSetup();
-
+
Map objectModel = ContextHelper.getObjectModel(this.context);
// Keep the previous view data, if any (is it really necessary?), and set the new one
Object oldViewData = FlowHelper.getContextObject(objectModel);
FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData));
-
+
Source src = null;
-
+ InputStream input = null;
try {
src = this.resolver.resolveURI("cocoon:/" + uri);
- InputStream input = src.getInputStream();
-
+ input = src.getInputStream();
IOUtil.copy(input, output);
} finally {
+ if (input != null) {
+ try {
+ input.close();
+ } catch (IOException ignored) {}
+ }
+
// Restore the previous view data
FlowHelper.setContextObject(objectModel, oldViewData);
@@ -118,23 +124,23 @@
}
}
}
-
+
/**
* Process a pipeline to a SAX <code>ContentHandler</code>
- *
+ *
* @param uri the pipeline URI
* @param viewData the view data object
* @param handler where the pipeline should be streamed to.
*/
- public void processToSAX(String uri, Object viewData, ContentHandler handler) throws SAXException, IOException, ProcessingException {
+ public void processToSAX(String uri, Object viewData, ContentHandler handler)
+ throws SAXException, IOException, ProcessingException {
checkSetup();
-
+
Map objectModel = ContextHelper.getObjectModel(this.context);
Object oldViewData = FlowHelper.getContextObject(objectModel);
FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData));
-
+
Source src = null;
-
try {
src = this.resolver.resolveURI("cocoon:/" + uri);
SourceUtil.toSAX(src, handler);
@@ -145,23 +151,23 @@
}
}
}
-
+
/**
* Process a pipeline and gets is result as a DOM <code>Document</code>
- *
+ *
* @param uri the pipeline URI
* @param viewData the view data object
* @return the document
*/
public Document processToDOM(String uri, Object viewData) throws ProcessingException, SAXException, IOException {
checkSetup();
-
+
Map objectModel = ContextHelper.getObjectModel(this.context);
Object oldViewData = FlowHelper.getContextObject(objectModel);
FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData));
-
+
Source src = null;
-
+
try {
src = this.resolver.resolveURI("cocoon:/" + uri);
return SourceUtil.toDOM(src);
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java Wed Sep 8 19:29:46 2004
@@ -1,12 +1,12 @@
/*
* Copyright 1999-2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -65,7 +65,7 @@
/** The system id used for caching */
private String systemIdForCaching;
-
+
/** The current ServiceManager */
private final ServiceManager manager;
@@ -92,15 +92,15 @@
/** Is start processing on the environment called? */
private boolean processed;
-
+
/** The used protocol */
private final String protocol;
/** SourceResolver (for the redirect source) */
private SourceResolver sourceResolver;
-
+
private String mimeType;
-
+
/**
* Construct a new object
*/
@@ -129,7 +129,7 @@
// create environment...
final EnvironmentWrapper wrapper = new EnvironmentWrapper(env, info, logger);
-
+
// The environment is a facade whose delegate can be changed in case of internal redirects
this.environment = new MutableEnvironmentFacade(wrapper);
@@ -139,9 +139,9 @@
} else {
this.environment.getObjectModel().remove(ObjectModelHelper.PARENT_CONTEXT);
}
-
+
this.systemId = info.systemId;
-
+
// initialize
this.init();
}
@@ -191,11 +191,11 @@
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
this.environment.setOutputStream(os);
- EnvironmentHelper.enterProcessor(this.pipelineDescription.lastProcessor,
+ EnvironmentHelper.enterProcessor(this.pipelineDescription.lastProcessor,
this.manager,
this.environment);
try {
-
+
this.pipelineDescription.processingPipeline.process(this.environment);
} finally {
EnvironmentHelper.leaveProcessor();
@@ -221,13 +221,13 @@
}
/**
- *
+ *
* @see org.apache.excalibur.source.Source#exists()
*/
public boolean exists() {
return true;
}
-
+
/**
* Get the Validity object. This can either wrap the last modification
* date or the expires information or...
@@ -281,7 +281,7 @@
this.sourceValidity = this.pipelineDescription.processingPipeline.getValidityForEventPipeline();
final String eventPipelineKey = this.pipelineDescription.processingPipeline.getKeyForEventPipeline();
this.mimeType = this.environment.getContentType();
-
+
if (eventPipelineKey != null) {
StringBuffer buffer = new StringBuffer(this.systemId);
if (this.systemId.indexOf('?') == -1) {
@@ -293,7 +293,7 @@
buffer.append(eventPipelineKey);
this.systemIdForCaching = buffer.toString();
} else {
- this.systemIdForCaching = this.systemId;
+ this.systemIdForCaching = this.systemId;
}
} finally {
EnvironmentHelper.leaveProcessor();
@@ -350,7 +350,7 @@
this.environment);
try {
this.pipelineDescription.processingPipeline.process(this.environment,
- EnvironmentHelper.createEnvironmentAwareConsumer(consumer));
+ EnvironmentHelper.createEnvironmentAwareConsumer(consumer));
} finally {
EnvironmentHelper.leaveProcessor();
}
@@ -374,17 +374,20 @@
this.pipelineDescription.release();
this.pipelineDescription = null;
}
- if ( this.processed ) {
+
+ if (this.processed) {
this.processed = false;
this.environment.finishingProcessing();
}
- this.sourceValidity = null;
+
if (this.redirectSource != null) {
this.sourceResolver.release(this.redirectSource);
+ this.redirectSource = null;
}
- this.environment.reset();
- this.redirectSource = null;
+ this.sourceValidity = null;
this.redirectValidity = null;
+
+ this.environment.reset();
this.exception = null;
this.needsRefresh = true;
}