<texit info> author=E. Bruno title=XML TP5 </texit>
TP5 - La mise en place d’un application Web XML s’appuyant sur Apache Cocoon
Après avoir suivi la présentation de l’outils Apache Maven, vous mettrez en place une application Apache cocoon basique.
Mise en place de Cocoon
Après avoir configuré maven pour l’utilisation à l’USTV (ajout du proxy dans ~/.m2/settings.xml cf. http://maven.apache.org/guides/mini/guide-proxies.html), suivez le tutoriel Your first Cocoon application using Maven 2 pour installer l’application de base Cocoon 2.2 (http://cocoon.apache.org/2.2/).Pas de proxy à configurer pour l’upf.
Utilisation d'une pipeline cocoon
Après avoir suivi le tutoriel Your first XML pipeline, mettez en place les pipelines nécessaires pour obtenir à partir de cocoon:
- le document XML
books.xml
- le document XML intermédiaire dans le format XML pivot (
books_pivot.xml
) après application d’une feuille de style XSLT sur le document précédents (cf. TP sur XSLT) - le document XHTML
books.xhtml
après application d’un autre feuille de style sur le documentbooks_pivot.xml
. Votre document fera référence à une feuille CSS pour la présentation. - le document SVG
books_prices.svg
qui affichera un histogramme SVG des prix des livres. - le document png
books_prices.png
qui affichera une version png du diagramme précédent.
Cocoon avancé
Mettez en place, une utilisation plus poussée de cocoon en :
- Etudiant et mettant en place les divers composants du sitemap.
- Mettant en place uen application modulaire à base de blocks.
- Utilisation de saxon : http://mrhaki.blogspot.com/2008/09/use-saxon-in-cocoon-22.html
Améliorer cocoon
Installer Batik (SVG)
Dans le pom.xml
à la fin de l’élément dependencies
ajouter
<dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-batik-impl</artifactId> <version>1.0.0</version> </dependency>
Installer FOP (xsl-fo/pdf)
<dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-fop-impl</artifactId> <version>1.0.0</version> </dependency>
Utiliser le SQL Transformer
Pour utiliser le SQL Transformer vous devez :
- Ajouter dans l’élément
dependencies
du pom.xml les dépendances suivantes pour que maven puisse les télécharger. Elles concernent le block databases de cocoon et les drivers de postgresql.
<dependency> <groupId>org.apache.cocoon</groupId> <artifactId>cocoon-databases-impl</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.4-702.jdbc3</version> </dependency>
Le .jar pour oracle n’est pas dans les dépôts, il faut donc le télécharger ici (dans la suite adapter la version) : http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html et l’installer “à la main”.
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 \ -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true
on peut ensuite ajouter la dépendance dans le pom.xml :
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency>
- Ensuite configurer la ou les sources de données que vous voulez utiliser en créant un fichier
src/main/resources/META-INF/cocoon/spring/datasources.xml
- datasources.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean name="org.apache.avalon.excalibur.datasource.DataSourceComponent/personnel" class="org.apache.cocoon.databases.bridge.spring.avalon.SpringToAvalonDataSourceWrapper"> <property name="wrappedBean"> <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName" value="org.postgresql.Driver"/> <property name="url" value="jdbc:postgresql://localhost/test"/> <property name="username" value="test"/> <property name="password" value="test"/> </bean> </property> </bean> </beans>
- Le driver class name pour oracle
oracle.jdbc.OracleDriver
- L’url pour oracle
jdbc:oracle:thin:@//10.8.0.2:1521
- Créer un ou plusieurs fichiers XML qui contient le squelette des documents XML à générer et surtout les requêtes SQL à exécuter. Vous pouver ranger des sous-répertoires de
src/main/resources/COB-INF
(attention aux chemins dans le sitemap).
La syntaxe est expliquée ici http://cocoon.apache.org/2.1/userdocs/sql-transformer.html
- testsql.xml
<page> <title>Hello</title> <content> <para>This is my first Cocoon page filled with sql data!</para> <sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0"> <sql:query name="personne"> select * from personne </sql:query> </sql:execute-query> </content> </page>
- finalement modifier le sitemap en ajoutant dans un
pipeline
un match pour générer le fichier XML précédent, lui appliquer le SQL Transformer et le serialiser.
<map:match pattern="personne.xml"> <map:generate src="testsql.xml"/> <map:transform type="sql"> <map:parameter name="use-connection" value="personnel"/> <map:parameter name="show-nr-of-rows" value="true"/> <map:parameter name="clob-encoding" value="UTF-8"/> </map:transform> <map:serialize type="xml"/> </map:match>
Retourner directement des fichiers (A faire dans le sitemap)
<!-- Exemple de lecture d'un fichier avec type MIME --> <!-- Remarquer l'utilisation de l'URL pour passer un parametre --> <map:match pattern="CSS/*.css"> <map:read mime-type="text/css" src="CSS/{1}.css"/> </map:match> <map:match pattern="DTD/*.dtd"> <map:read mime-type="text/plain" src="DTD/{1}.dtd"/> </map:match>
Passer des paramètres
<map:match pattern="livres/pivots_*.xml"> <map:generate src="Books/books.xml"/> <map:transform src="Books/tp3.xsl" type="saxon"> <!-- Deux solutions --> <!-- Passage directe d'un paramètre --> <map:parameter name="topauthor" value="{1}"/> <!-- La feuille de style accepte les param depuis les URL ?param1=valeur1¶m2=valeur2.... --> <map:parameter name="use-request-parameters" value="true"/> </map:transform> <map:serialize type="xml"/> </map:match>