Odelia>Technologies

Un service web traitant un fichier téléchargé avec Camel et un DSL Groovy

| |

Notre article précédent, Exposer une Closure Groovy en tant que service HTTP, décrivait un simple DSL Groovy permettant de définir une route Camel composée du composant Camel camel-jetty et d'un Processor, dans le but de pouvoir invoquer du code Groovy en tant que service sur HTTP.
Cette fois, nous donnons un nouvel exemple de script Groovy capable de traiter un fichier transmis au travers d'une requête POST HTTP, ceci grâce au support des messages multi-parties du composant camel-jetty.
Une telle requête peut tout simplement être envoyée au moyen d'un formulaire HTML.

Le script GroovyAttachmentProcessor.groovy

Pour commencer, voici le script GroovyAttachmentProcessor.groovy (fourni en fichier attaché à cet article), exprimé dans le DSL GroovyCamel :

import groovy.xml.StreamingMarkupBuilder

"http://localhost:8080/test/" { ex ->   
    def filename = ex.in.headers.fichier

    def data = ex.in.getAttachment(filename) // instance de DataHandler
       
    // Traiter les données ici
    // Les données sont écrites dans un fichier
    def file = new File(/D:\Tmp/, filename)
    file.withOutputStream {
        data.writeTo(it)
    }
               
    def builder = new StreamingMarkupBuilder()
    def doc = builder.bind {
        html {
            head {
                title('GroovyCamel')
            }
            body {
                h1('GroovyCamel')
                p("Fichier DSL GroovyCamel : $dslFilename")
                p { mkp.yieldUnescaped("Exposé sur l'URL : $uri") }
                       
                h1 { mkp.yieldUnescaped('Fichier attaché') }
                table {
                    tr {
                        td('Nom :'); td(filename)                                   
                    }
                    tr {
                        td('Emplacement :'); td(file.path)
                    }
                }
            }
        }
               
}

    ex.out.body = doc.toString()
}

Vous trouverez également en fichier attaché à cet article, une page HTML qui permettra l'invocation de la route Camel, par l’envoi d'un formulaire ; ce formulaire est composé de deux champs : le premier est de type file et porte le nom original fichier : il vous permettra de sélectionner un fichier local sur votre disque ; et le second correspond au bouton de soumission des données.
Après soumission dans un navigateur Internet, et lorsque les données du formulaire parviendront au composant camel-jetty, ce dernier créera un attachement pour le fichier transféré et ayant un nom correspondant au nom du fichier.
Dans le script Groovy, le nom du fichier transféré est obtenu grâce à une entrée de la Map des entêtes du Message Camel (le message in qui participe à l'échange) : cette entrée a pour clé, le nom du champ de type file, soit fichier.
A partir du nom réel du fichier, le code Groovy obtient ensuite l'attachement sous la forme d'un objet de type DataHandler, pour ensuite écrire les données dans un fichier.

Le reste du code Groovy consiste à générer une page HTML grâce au builder Groovy StreamingMarkupBuilder qui sera renvoyée à l'appelant.

Partir sur la nouvelle route Camel

Pour tester notre nouvelle route Camel, exécutez-la en lançant le script GroovyCamel.groovy (en utilisant le fichier attaché de même nom, fourni avec cet article), en passant GroovyAttachmentProcessor.groovy comme argument, avec la commande suivante :

groovy GroovyCamel.groovy GroovyAttachmentProcessor.groovy

Vous pourrez ensuite ouvrir la page web Form.html (également fournie) avec le navigateur Internet de votre choix, et soumettre le formulaire après avoir sélectionné un fichier à transmettre.

Fichier attachéTaille
Form.html.txt215 octets
GroovyAttachmentProcessor.groovy898 octets
GroovyCamel.groovy1.33 Ko

balises dans Langages et systèmes

AJAX cajo Camel DSL Grails Groovy GSP Java JBI RSS ServiceMix SOA