Table des matières

<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:

  1. le document XML books.xml
  2. 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)
  3. le document XHTML books.xhtml après application d’un autre feuille de style sur le document books_pivot.xml. Votre document fera référence à une feuille CSS pour la présentation.
  4. le document SVG books_prices.svg qui affichera un histogramme SVG des prix des livres.
  5. 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 :

  1. Etudiant et mettant en place les divers composants du sitemap.
  2. Mettant en place uen application modulaire à base de blocks.

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 :

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

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>
  1. 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&param2=valeur2....
           -->
          <map:parameter name="use-request-parameters" value="true"/>
 
        </map:transform>
        <map:serialize type="xml"/>
      </map:match>