DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23575>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23575 [PATCH] (XPath)TraversableGenerator improvements Summary: [PATCH] (XPath)TraversableGenerator improvements Product: Cocoon 2 Version: Current CVS 2.1 Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: sitemap components AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] CC: [EMAIL PROTECTED] The discussion about this patch took place on the cocoon dev list and can be found here: http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=106510328905939&w=2 To summerize: - allow non-collection resources to be input source - check whether input source exists - query Context object mime-type mapping when deciding whether to execute the xpath in XPathTraversableGenerator. --- unified diffs: Index: TraversableGenerator.java =================================================================== RCS file: /home/cvspublic/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/generation/TraversableGenerator.java,v retrieving revision 1.2 diff -u -r1.2 TraversableGenerator.java --- TraversableGenerator.java 25 Sep 2003 17:28:38 -0000 1.2 +++ TraversableGenerator.java 2 Oct 2003 15:48:13 -0000 @@ -308,8 +308,8 @@ try { inputSource = (TraversableSource) this.resolver.resolveURI(this.source); - if (!inputSource.isCollection()) { - throw new ResourceNotFoundException(this.source + " is not a collection."); + if (!inputSource.exists()) { + throw new ResourceNotFoundException(this.source + " does not exist."); } this.contentHandler.startDocument(); Index: XPathTraversableGenerator.java =================================================================== RCS file: /home/cvspublic/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/generation/XPathTraversableGenerator.java,v retrieving revision 1.1 diff -u -r1.1 XPathTraversableGenerator.java --- XPathTraversableGenerator.java 4 Sep 2003 12:42:40 -0000 1.1 +++ XPathTraversableGenerator.java 2 Oct 2003 15:48:14 -0000 @@ -61,6 +61,8 @@ import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.environment.Context; +import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.xml.dom.DOMStreamer; import org.apache.excalibur.source.SourceException; @@ -83,7 +85,10 @@ * It can be used both as a plain TraversableGenerator or, if an XPath is * specified, it will perform an XPath query on every XML resource, where "xml * resource" is, by default, any resource ending with ".xml", which can be - * overriden by setting the (regexp) pattern "xmlFiles as a sitemap parameter. + * overriden by setting the (regexp) pattern "xmlFiles as a sitemap parameter, + * or where the name of the resource has a container-wide mime-type mapping to + * 'text/xml' such as specified by mime-mapping elements in a web.xml + * descriptor file. * * The XPath can be specified in two ways: * <ol> @@ -150,8 +155,10 @@ protected XPathProcessor processor = null; /** The parser for the XML snippets to be included. */ protected DOMParser parser = null; - /** The prefix resolver for namespaced queries */ + /** The prefix resolver for namespaced queries */ protected XPathPrefixResolver prefixResolver; + /** The cocoon context used for mime-type mappings */ + protected Context context; public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException { @@ -206,8 +213,10 @@ this.prefixResolver.addPrefix(paramName, paramValue); } } + + this.context = ObjectModelHelper.getContext(objectModel); } - + public void service(ServiceManager manager) throws ServiceException { super.service(manager); processor = (XPathProcessor)manager.lookup(XPathProcessor.ROLE); @@ -330,7 +339,8 @@ * otherwise. */ protected boolean isXML(TraversableSource path) { - return this.xmlRE.match(path.getName()); + String mimeType = this.context.getMimeType(path.getName()); + return this.xmlRE.match(path.getName()) || "text/xml".equalsIgnoreCase(mimeType); } /** @@ -375,6 +385,9 @@ this.xpath = null; this.attributes = null; this.doc = null; + this.xmlRE = null; + this.prefixResolver = null; + this.context = null; } /**
