Hi tried this a few months ago and found that the "jar:/" protocol don't check if the source have changed. I can't say if it's problem of cocoon cache or "jar:/" specification, but what I know is I can't use it to display i, real time an oo doc that people may edit. Some more ideas here [XfolioOpenOfficeGeneration]


Here is a sitemap snippet that shows how the jar:/ protocol can be used to read data from jar files or zip files. – Con

<map:pipelines>
	<!-- read content from out of a zip file -->
	<map:pipeline>
		<map:match pattern="*/**.xml">
			<map:generate src="jar:http://localhost/jar-test/{1}!/{2}.xml"/>
			<map:serialize type="xml"/>
		</map:match>
	</map:pipeline>
	<map:pipeline>
		<map:match pattern="*/**.jpg">
			<map:read src="jar:http://localhost/jar-test/{1}!/{2}.jpg"/>
		</map:match>
	</map:pipeline>

<!--
if you don't want to "hard-code" localhost, 
don't forget the {servletPath} sitemap variable

<map:read src="jar:http://{servletPath}/{1}.sxw!/meta.xml"/>

-->

	<!-- read the archive file -->
	<map:pipeline>
		<map:match pattern="*.zip">
			<map:read src="{1}.zip"/>
		</map:match>
		<map:match pattern="*.jar">
			<map:read src="{1}.jar"/>
		</map:match>
	</map:pipeline>
</map:pipelines>

Note:

This sitemap is intended to be mounted as /jar-test - it uses http to access the zip file. This is because the jar: protocol is not aware of the cocoon: protocol. An alternative would be to access the jar file with the file: protocol, which would involve specifying a complete file path name. You could do this using an input module to specify the file name.

To test it, access it as:
http://localhost/jar-test/test.zip/test.jpg

Using the context protocol

Here is an example using a file relative to the context. In this case we get a file named content.xml inside an open-office zip file with a .sxw extension. The realpath module allows us to convert relative path to absolute ones.

<map:match src='**.sxw'>
	<map:generate src="jar:file:///{realpath:docu}/{0}!/content.xml"/>
	<map:transform src='open-office-to-docbook.xml'/>
	<map:serialize type='xml'/>
</map:match>
  • No labels