Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change xslt processor #4

Open
jgribonvald opened this issue Jul 19, 2012 · 1 comment
Open

Change xslt processor #4

jgribonvald opened this issue Jul 19, 2012 · 1 comment

Comments

@jgribonvald
Copy link
Member

Il serait bien de pouvoir définir un autre xslt processor que JAXB qui est très basique et qui n'intègre pas les fonctions exslt, de plus cela n'utilise que la version 1.0 de xslt.

Je veux bien pousser des modifications par rapport à cela, mais il faudrait discuter de ce que faudrait faire, je ne veux pas effectuer trop de modifications s'il faut revenir en arrière ou si la soultion choisie n'est pas la bonne.

Actuellement il existerait 3 types principaux de xslt processor, JAXB/JAXP, XALAN et SAXON. Que choisir et quoi faire ?

J'aurais tendance à dire que pour faire au mieux il faudrait que ce soit paramètrable en fonction de la feuille xsl à utiliser, donc que l'on puisse choisir la librairie à utiliser en définissant la classe d'appel dans le fichier de configuration mappings.xml.

Pour expliquer l'utilisation de telle ou telle lib il faudrait simplement dans src/main/java/org/esupportail/lecture/domain/model/Source.java éditer la méthode xml2html, uniquement sur cette ligne :
TransformerFactory tFactory = TransformerFactory.newInstance();
de cette façon :
TransformerFactory tFactory = TransformerFactory.newInstance(xsltProcessorClass, Thread.currentThread().getContextClassLoader());
CF ici : http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/TransformerFactory.html#newInstance%28java.lang.String,%20java.lang.ClassLoader%29

ou xsltProcessorClass est de type String avec les valeurs suivantes :
pour JAXB/JAXP : xsltProcessorClass=""; // j'ai peut être un doute sur ce point
pour xalan : xsltProcessorClass="org.apache.xalan.processor.TransformerFactoryImpl"; // il y a plusieurs type de processeur proposés
pour saxon : xsltProcessorClass = "net.sf.saxon.TransformerFactoryImpl"

Bien évidemment il faudra fournir les librairies des processeur xslt que nous souhaiterons utiliser.

Qu'en pensez vous ? Il y a différentes façons de procéder on peut très bien fixer l'utilisation à une seule lib.

@raymondBourges
Copy link
Member

Julien voici mes remarques :

  • "Je veux bien pousser des modifications" --> Super !
  • "TransformerFactory.newInstance(xsltProcessorClass, Thread.currentThread().getContextClassLoader());" --> D'après le lien que tu envoies "TransformerFactory.newInstance(xsltProcessorClass, null);" devrait suffire.
  • "Qu'en pensez vous ?" --> Tu connais mieux que moi les besoins car je me suis toujours contenter du processor par défaut. Peut-être que le plus simple serait d'en mettre un seul qui répond au mieux aux besoins et à condition qu'il fasse au moins ce que sait faire celui de la JVM. Si tu penses que ce serait mieux d'en proposer n alors OK mais il serait bien de garder une compatibilité ascendante en n'obligeant pas à renseigner le procesor dans mappings.xml --> Si rien de préciser alors on utilise celui de ma JVM | si un processor préciser alors ce dernier est utilisé.
    Merci.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants