Author: thorsten
Date: Thu Aug 21 03:35:24 2008
New Revision: 687698
URL: http://svn.apache.org/viewvc?rev=687698&view=rev
Log:
Fixing sourceResolver issues sync with main plugins
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/DispatcherHelper.java
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/RecursiveDirectoryTraversalAction.java
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/ResourceTypeAction.java
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/util/SourceUtil.java
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/ContractBeanDOMImpl.java
Thu Aug 21 03:35:24 2008
@@ -32,6 +32,7 @@
import javax.xml.transform.dom.DOMSource;
import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.excalibur.source.SourceResolver;
import org.apache.forrest.dispatcher.lenya.xml.NamespaceHelper;
import org.apache.forrest.dispatcher.transformation.DispatcherTransformer;
import org.w3c.dom.Document;
@@ -107,7 +108,6 @@
protected DispatcherHelper dispatcherHelper;
- protected ServiceManager manager;
private HashMap parameterHelper;
@@ -117,6 +117,8 @@
private Object defaultVariables;
+ private SourceResolver resolver;
+
/**
* The ContractBean contains all fields to work with contracts. It is a
* helper bean.
@@ -131,11 +133,11 @@
* @param defaultProperties
* @throws ParserConfigurationException
*/
- public ContractBeanDOMImpl(ServiceManager manager, HashMap
parameterHelper,Document defaultProperties, URIResolver uriResolver)
+ public ContractBeanDOMImpl(SourceResolver resolver, HashMap
parameterHelper,Document defaultProperties, URIResolver uriResolver)
throws ParserConfigurationException {
m_uriResolver=uriResolver;
- this.manager = manager;
- dispatcherHelper = new DispatcherHelper(manager);
+ this.resolver = resolver;
+ dispatcherHelper = new DispatcherHelper(resolver);
this.parameterHelper = parameterHelper;
this.defaultVariables=defaultProperties;
}
@@ -167,7 +169,7 @@
* @see org.apache.forrest.dispatcher.ContractBeanInterface#initialize()
*/
public void initialize() throws ParserConfigurationException {
- dispatcherHelper = new DispatcherHelper(this.manager);
+ dispatcherHelper = new DispatcherHelper(resolver);
}
/*
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/DispatcherHelper.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/DispatcherHelper.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/DispatcherHelper.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/DispatcherHelper.java
Thu Aug 21 03:35:24 2008
@@ -27,10 +27,10 @@
import javax.xml.transform.TransformerFactory;
import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.xml.XMLUtils;
import org.apache.cocoon.xml.dom.DOMBuilder;
import org.apache.excalibur.source.SourceNotFoundException;
+import org.apache.excalibur.source.SourceResolver;
import org.apache.forrest.dispatcher.lenya.xml.NamespaceHelper;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
@@ -53,7 +53,7 @@
private NamespaceHelper namespaceHelper;
- private ServiceManager manager;
+ private SourceResolver resolver;
/**
* Create a DOM representation of this dispatcher.
@@ -72,7 +72,7 @@
*/
public Document getDocument(String uri) throws Exception {
Document doc = org.apache.forrest.dispatcher.util.SourceUtil.readDOM(
- uri, this.manager);
+ uri, this.resolver);
if (doc != null) {
this.namespaceHelper = new NamespaceHelper(
DISPATCHER_NAMESPACE_URI, DISPATCHER_PREFIX, doc);
@@ -184,9 +184,9 @@
}
- public DispatcherHelper(ServiceManager manager)
+ public DispatcherHelper(SourceResolver resolver)
throws ParserConfigurationException {
- this.manager = manager;
+ this.resolver = resolver;
this.namespaceHelper = new NamespaceHelper(DISPATCHER_NAMESPACE_URI,
DISPATCHER_PREFIX, "foo");
}
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/RecursiveDirectoryTraversalAction.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/RecursiveDirectoryTraversalAction.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/RecursiveDirectoryTraversalAction.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/RecursiveDirectoryTraversalAction.java
Thu Aug 21 03:35:24 2008
@@ -30,6 +30,7 @@
import org.apache.cocoon.environment.Redirector;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
+import org.apache.forrest.dispatcher.DispatcherException;
/**
* Calculates which location to return for a given directory.
@@ -118,17 +119,13 @@
} else {
return null;
}
- } catch (MalformedURLException e) {
- getLogger().warn(
- "Selector URL '" + uri + "' is not a valid Source URL");
- return null;
- } catch (IOException e) {
+ } catch (DispatcherException e) {
getLogger().warn(
"Error reading from source '" + uri + "': "
+ e.getMessage());
return null;
} finally {
- resolver.release(src);
+ release(src);
}
}
@@ -156,14 +153,13 @@
* is overriding this view. This override can be used for directories
* (default.fv) and/or files (*.fv). That means that the root view is the
* default view as long no other view can be found in the requested child.
- * @throws IOException
- * @throws MalformedURLException
+ * @throws DispatcherException
*
*/
- private void computeResponseURI(String uri, Source src)
- throws MalformedURLException, IOException {
- src = resolver.resolveURI(uri);
- if (src.exists()) {
+ private void computeResponseURI(String uri, Source src) throws
DispatcherException{
+ try {
+ src = resolver.resolveURI(uri);
+ if (src.exists()) {
this.map.put("uri", uri);
} else {
if (this.getRest().lastIndexOf("/") > -1) {
@@ -182,8 +178,23 @@
}
}
}
+ } catch (MalformedURLException e) {
+ throw new DispatcherException(e);
+ } catch (IOException e) {
+ throw new DispatcherException(e);
+ }finally{
+ release(src);
+ }
+
+ }
+ /**
+ * @see
org.apache.excalibur.source.SourceFactory#release(org.apache.excalibur.source.Source)
+ */
+ public void release(Source source) {
+ if(source!=null){
+ resolver.release(source);
+ }
}
-
public void prepare(Parameters parameters, String src) {
this.setRequest(parameters.getParameter("request", src));
this.setProjectFallback(parameters.getParameter("projectFallback",
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/ResourceTypeAction.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/ResourceTypeAction.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/ResourceTypeAction.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/acting/ResourceTypeAction.java
Thu Aug 21 03:35:24 2008
@@ -50,6 +50,7 @@
import org.apache.cocoon.environment.Redirector;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
+import org.apache.forrest.dispatcher.DispatcherException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
@@ -107,31 +108,23 @@
} else {
return null;
}
- } catch (MalformedURLException e) {
- getLogger().warn(
- "Selector URL '" + uri + "' is not a valid Source URL");
- return null;
- } catch (IOException e) {
- getLogger().warn(
- "Error reading from source '" + uri + "': "
- + e.getMessage());
- return null;
- } catch (Exception e) {
+ } catch (Exception e) {
getLogger().warn(
"Error reading from source '" + uri + "': "
+ e.getMessage());
return null;
}finally {
- resolver.release(src);
+ release(src);
}
}
private void computeResponseURI(String uri, Source src)
- throws Exception {
- src = resolver.resolveURI(uri);
- if (src.exists()) {
+ throws DispatcherException {
+ try {
+ src = resolver.resolveURI(uri);
+ if (src.exists()) {
Document rawData =
org.apache.forrest.dispatcher.util.SourceUtil.readDOM(
- uri, this.manager);
+ uri, resolver);
NodeList type =
rawData.getElementsByTagNameNS(getResourceTypeElementNS(),getResourceTypeElement());
String typeString = type.item(0).getFirstChild().getNodeValue();
Source typeSource =
resolver.resolveURI(resourceTypeBase+typeString);
@@ -139,8 +132,21 @@
this.map.put("uri", typeSource.getURI());
}
}
+ } catch (Exception e) {
+ throw new DispatcherException(e);
+ }finally{
+ release(src);
+ }
+
}
-
+ /**
+ * @see
org.apache.excalibur.source.SourceFactory#release(org.apache.excalibur.source.Source)
+ */
+ public void release(Source source) {
+ if(source!=null){
+ resolver.release(source);
+ }
+ }
public void prepare(Parameters parameters, String src) {
this.setRequest(parameters.getParameter("request", src));
this.setMetaExtension(parameters.getParameter("metaExtension",
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
Thu Aug 21 03:35:24 2008
@@ -23,6 +23,7 @@
import java.util.Iterator;
import java.util.Map;
+import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
@@ -44,12 +45,15 @@
import org.apache.cocoon.xml.dom.DOMUtil;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceNotFoundException;
import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.AggregatedValidity;
import org.apache.excalibur.xml.xpath.XPathProcessor;
import org.apache.forrest.dispatcher.ContractBean;
import org.apache.forrest.dispatcher.ContractBeanDOMImpl;
import org.apache.forrest.dispatcher.DispatcherException;
import org.apache.forrest.dispatcher.DispatcherHelper;
+import org.apache.forrest.dispatcher.lenya.xml.DocumentHelper;
import org.apache.forrest.dispatcher.lenya.xml.NamespaceHelper;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
@@ -189,7 +193,7 @@
private HashMap parameterHelper;
- private SourceResolver m_resolver;
+ private org.apache.excalibur.source.SourceResolver m_resolver;
private String requestId;
@@ -243,16 +247,27 @@
// or add this property to forrest.properties.xml
// to force a SourceValidity.INVALID
if (null != validityFile & !(validityOverride.equals(CACHING_OFF))) {
+ Source resolveSource=null;
try {
- this.validity = m_resolver.resolveURI(validityFile).getValidity();
+ resolveSource= m_resolver.resolveURI(validityFile);
+ this.validity = resolveSource.getValidity();
} catch (Exception e) {
getLogger().error(e.getMessage());
+ }finally{
+ release(resolveSource);
}
} else
this.validity = null;
return this.validity;
}
-
+/**
+ * @see
org.apache.excalibur.source.SourceFactory#release(org.apache.excalibur.source.Source)
+ */
+ public void release(Source source) {
+ if(source!=null){
+ m_resolver.release(source);
+ }
+ }
public void setManager(ServiceManager manager) throws ServiceException {
super.service(manager);
this.manager = manager;
@@ -329,7 +344,7 @@
if (null == m_resolver)
try {
- m_resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+ m_resolver = (org.apache.excalibur.source.SourceResolver)
manager.lookup(SourceResolver.ROLE);
} catch (ServiceException e) {
throw new ProcessingException(e);
}
@@ -517,7 +532,7 @@
localRecycle();
try {
if (null == this.dispatcherHelper)
- this.dispatcherHelper = new DispatcherHelper(manager);
+ this.dispatcherHelper = new DispatcherHelper(m_resolver);
if (null == this.processor)
this.processor = (XPathProcessor) this.manager
.lookup(XPathProcessor.ROLE);
@@ -530,7 +545,7 @@
String propertyURI = "cocoon://" + requestId + ".props";
try {
this.defaultProperties = org.apache.forrest.dispatcher.util.SourceUtil
- .readDOM(propertyURI, this.manager);
+ .readDOM(propertyURI, m_resolver);
} catch (Exception e1) {
String error = "dispatcherError:\n" + "Could not get the properties
for "
+ propertyURI + "\n DispatcherStack: " + e1;
@@ -640,7 +655,7 @@
private void contractProcessingStart(Attributes attr) throws SAXException {
try {
if (contract == null)
- contract = new ContractBeanDOMImpl(this.manager, parameterHelper,
+ contract = new ContractBeanDOMImpl(m_resolver, parameterHelper,
defaultProperties, (URIResolver) this);
} catch (Exception e) {
String error = DispatcherException.ERROR_500 + "\n"
@@ -658,9 +673,11 @@
contract.setContractName(value);
String contractUri = ContractBean.CONTRACT_RESOLVE_PREFIX + "."
+ currentFormat + "." + value;
+ Source contractSource = null;
try {
+ contractSource = m_resolver.resolveURI(contractUri);
Document doc = org.apache.forrest.dispatcher.util.SourceUtil.readDOM(
- contractUri, this.manager);
+ contractUri, m_resolver);
contract.setContractImpl(doc, contractUri);
// contract.setContractImpl(contractUri);
} catch (Exception e) {
@@ -673,6 +690,8 @@
+ contractUri + "\".\n\n" + "dispatcherErrorStack:\n" + e;
getLogger().error(error);
throw new SAXException(error);
+ }finally{
+ release(contractSource);
}
if (getLogger().isDebugEnabled()) {
getLogger().debug(
@@ -682,10 +701,11 @@
} else if (ContractBean.CONTRACT_NUGGET_ATTRIBUTE.equals(localName)) {
// contract is a nugget-contract
contract.setNugget(true);
+ Source contractRawSource =null;
try {
-
+ contractRawSource = m_resolver.resolveURI(value);
Document doc = org.apache.forrest.dispatcher.util.SourceUtil.readDOM(
- value, this.manager);
+ value, m_resolver);
contract.setContractRawData(doc);
// contract.setNuggetUri(value);
} catch (Exception e) {
@@ -698,6 +718,8 @@
+ value + "\".\n\n" + "dispatcherErrorStack:\n " + e;
getLogger().error(error);
throw new SAXException(error);
+ } finally{
+ release(contractRawSource);
}
if (getLogger().isDebugEnabled()) {
getLogger().debug(
@@ -1019,7 +1041,7 @@
return null;
} finally {
- m_resolver.release(xslSource);
+ release(xslSource);
}
}
Modified:
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/util/SourceUtil.java
URL:
http://svn.apache.org/viewvc/forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/util/SourceUtil.java?rev=687698&r1=687697&r2=687698&view=diff
==============================================================================
---
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/util/SourceUtil.java
(original)
+++
forrest/branches/update_cocoon_2.1.12-dev/whiteboard/cocoon-2.2-blocks/dispatcher/src/main/java/org/apache/forrest/dispatcher/util/SourceUtil.java
Thu Aug 21 03:35:24 2008
@@ -21,10 +21,9 @@
import javax.xml.parsers.ParserConfigurationException;
import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.environment.SourceResolver;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceNotFoundException;
+import org.apache.excalibur.source.SourceResolver;
import org.apache.forrest.dispatcher.lenya.xml.DocumentHelper;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
@@ -41,27 +40,20 @@
* @throws SAXException if an error occurs.
* @throws IOException if an error occurs.
*/
- public static Document readDOM(String sourceUri, ServiceManager manager)
+ public static Document readDOM(String sourceUri, SourceResolver resolver)
throws ServiceException, SourceNotFoundException,
ParserConfigurationException,
SAXException, IOException {
- SourceResolver resolver = null;
Source source = null;
Document document = null;
try {
-
- resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
source = resolver.resolveURI(sourceUri);
-
if (source.exists()) {
document =
DocumentHelper.readDocument(source.getInputStream());
}
} finally {
- if (resolver != null) {
if (source != null) {
resolver.release(source);
}
- manager.release(resolver);
- }
}
return document;
}