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; }