You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "Scherler, Thorsten" <Th...@weidmueller.de> on 2003/03/07 10:36:38 UTC

[CreateMinimalWebapp] remove all the optional jars with a XSL-Transformation

This is the second copy of that mail (the first was not delivered).

> Hello group,
> 
> I created a minimal webapp and found the following remark from Geoff Howard in 
> [1 href="http://wiki.cocoondev.org/Wiki.jsp?page=CreateMinimalWebapp"] CreateMinimalWebapp:
> 2. edit lib/jars.xml to comment out/remove all the optional jars except the ones noted above
>     1. could be done with an xsl transform
> [/1]
> 
> I wrote 2 XSLT- files that are working fine to do the job, but I would like to have more "intelligence" (please see below):
> The first xslt (jars2exclude.xsl [2]) checks the <lib> element  form the jars.xml whether it starts with  'optional/' (the dir to exclude files from).  If so they will be labeled "2exclude" (there are exceptions - you will see later).
> <xsl:when test="starts-with(text(), 'optional/')"> [compare 2]
> The jars.xml looks like this:
> ...
> <file>
>     <title/>
>     <description/>
>     <used-by/>
>     <lib>core/jvm1.2/excalibur-datasource-vm12-20021121.jar</lib>
>     <homepage/>
> </file>
> ...
> The example file would not meet the criteria. The following would:
> <file>
> ...
> <lib>optional/servlet_2_2.jar</lib>
> ...
> <file>
> But this certain file has to be left untouched [1] - this is one of n exceptions (2 are mentioned in [1], but I need more<-n exception). This is be done with <xsl:choose><xsl:when>[2]. Here is an example of an exception:
> <xsl:when test="substring-after(text(), 'optional/')='servlet_2_2.jar'">
> <xsl:value-of select="."/>
> </xsl:when>
> 
> The result of the transformation [2] will look like this:
>     <file>
>         <title>XML Catalog Entity Resolver</title>
> ...
>         <lib>2exclude</lib>
> ...
>     </file>
>     <file>
>         <title>Servlet API</title>
> ...
>         <lib>optional/servlet_2_2.jar</lib>
> ...
>     </file>
> 
> Transforming this result with exclude2jars.xsl [3] will result in the new jar.xml (without the exclusions, but with the exceptions).
> 
> Ok, that is nice but I would prefer not to hard code the exceptions, e.g.:
> substring-after(text(), 'optional/')='servlet_2_2.jar'
>                                |------------|   |--------------------|
> |---| hard coded exception (e.g. |optional/|
> 
> I prefer to use something like jars2exclude.xml [4] where I declare the |---| hard coded exceptions. 
> ...
> 		<dir2exclude>optional/</dir2exclude>
> 		<except>servlet_2_2.jar</except>
> ...
> 
> ..but how can I do that?
> 
> Have a look at sitemap.snippet [5] to install it on your local cocoon version.
> 
> Any help and any ideas welcome.
> 
> King regards
> Thorsten
> 
> [1] http://wiki.cocoondev.org/Wiki.jsp?page=CreateMinimalWebapp
> [2]  jars2exclude.xsl:
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>     <xsl:template match="/">
>         <xsl:apply-templates/>
>     </xsl:template>
>     <xsl:template match="jars">
>         <jars>
>             <xsl:apply-templates select="file"/>
>         </jars>
>     </xsl:template>
>     <xsl:template match="file">
>         <file>
>             <xsl:apply-templates/>
>         </file>
>     </xsl:template>
>     <!--================Parsing of value===============================-->
>     <xsl:template match="title">
>         <title>
>             <xsl:value-of select="."/>
>         </title>
>     </xsl:template>
>     <xsl:template match="description">
>         <description>
>             <xsl:value-of select="."/>
>         </description>
>     </xsl:template>
>     <xsl:template match="used-by">
>         <used-by>
>             <xsl:value-of select="."/>
>         </used-by>
>     </xsl:template>
>     <!--==Excluding dir without the exceptions==-->
>     <xsl:template match="lib">
>         <lib>
>     <xsl:choose>
>         <xsl:when test="starts-with(text(), 'optional/')">
>             <xsl:choose>
>                 <xsl:when test="substring-after(text(), 'optional/')='fop-0.20.4.jar'">
>                     <xsl:value-of select="."/>> 
>                 </xsl:when>
>                 <xsl:when test="substring-after(text(), 'optional/')='servlet_2_2.jar'">
>                     <xsl:value-of select="."/>
>                 </xsl:when>
>                 <xsl:when test="substring-after(text(), 'optional/')='commons-jxpath-1.0.jar'">
>                     <xsl:value-of select="."/>
>                 </xsl:when>
>                 <xsl:otherwise>2exclude</xsl:otherwise>
>             </xsl:choose>
>         </xsl:when>
>         <xsl:otherwise>
>             <xsl:value-of select="."/>
>         </xsl:otherwise>
>     </xsl:choose>
>         </lib>
>     </xsl:template>
>     <xsl:template match="homepage">
>         <homepage>
>             <xsl:value-of select="."/>
>         </homepage>
>     </xsl:template>
> </xsl:stylesheet>
> [/2] 
> [3]exclude2jars.xsl:
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 	<xsl:template match="/">
> 	<xsl:apply-templates/>
> 	</xsl:template>
> 	<xsl:template match="jars">
> 	<xsl:comment>
>   Add an entry for each jar file used by Cocoon, following the other entries
> 
>   Author: Ovidiu Predescu "ovidiu@cup.hp.com"
>   Date: May 23, 2002
>   
> jars2exclude have been used.
> Author: Thorsten Scherler "thorsten.scherler@wyona.org"
> Date: March 06, 2003
> This is the modified jars.xml.
> 		</xsl:comment>
> 		<jars>
> 		<xsl:copy-of select="file[lib!='2exclude']"/>
> 		</jars>
> 	</xsl:template>
> </xsl:stylesheet>
> [/3]
> [4] jars2exclude.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <!--
>   Add an entry for each jar file which should be excluded  by Cocoon!
> 
>   Author: Thorsten Scherler "thorsten.scherler@wyona.org"
>   Date: March 05, 2003
>   
> 		-->
> <jars2exclude>
> 	<exclude>
> 		<dir2exclude>optional/</dir2exclude>
> 		<except>fop-0.20.4.jar</except>
> 		<except>commons-jxpath-1.0.jar</except>
> 		<except>servlet_2_2.jar</except>
> 	</exclude>
> </jars2exclude>
> [/4]
> [5]sitemap.snippet:
> 		<map:pipeline>
> 			<!-- Step 1: Label lib which should be excluded with "2exclude", leave exceptions untouched. -->
> 			<map:match pattern="2Xclude.xml">
> 				<map:generate src="xml/jars.xml"/>
> 				<map:transform src="xsl/jars2exclude.xsl"/>
> 				<map:serialize type="xml"/>
> 			</map:match>
> 			<!-- Step 2: Copy all elements except those which are labeled "2exclude"-->
> 			<map:match pattern="exclude">
> 				<map:generate src="cocoon:/2Xclude.xml"/>
> 				<map:transform src="xsl/exclude2jars.xsl"/>
> 				<map:serialize type="xml"/>
> 			</map:match>
> 		</map:pipeline>
> 
> 
> Mit freundlichem Gruss,
> 
> Thorsten Scherler
> Marketing / Telefonmarketing
> 
> Weidmüller GmbH & Co.
> P.O. Box 2807
> 33058 Paderborn
> Tel.:+ 49 - 5252-960-350
> Fax:+ 49 - 5252-960-116
> eMail: thorsten.scherler@weidmueller.de
> http://www.weidmueller.de
> 
>