3 votes

Alternative de DigesterLoader.createDigester(url) dans digester3

Pour être précis, ma question serait quelle est la méthode alternative pour Digester.createLoader(url) dans le nouveau Digester3 ?

Code commons-digester:1.8.1

    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("chemin_de_fichier");

    if (url != null) {          
        Digester tempDigester = DigesterLoader.createDigester(url);
        ----
        ----
        }

maintenant j'ai mis à jour commons-digester-1.8.1 vers org.apcahe.commons.Digester3-3.2 et je ne vois aucune méthode comme createDigester(ur); dans le nouveau jar.

Comment puis-je remplacer DigesterLoader.createDigester(url) en utilisant la nouvelle API pour obtenir un objet Digester en retour.

Code commons-digester:3.2

    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("chemin_de_fichier");

    if (url != null) {          
        Digester tempDigester = ???;
        ----
        ----
        }

Merci d'avance.

1voto

Barney Points 595

N'a pas vérifié exactement ce que fait la version 1.8, mais en supposant que votre URL résolve à un flux de règles basées sur XML, quelque chose comme ceci devrait faire l'affaire:

import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.binder.DigesterLoader;
import org.apache.commons.digester3.binder.RulesModule;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;

final URL url = curClassLoader.getResource("chemin_du_fichier");

RulesModule rules = new FromXmlRulesModule() {
  @Override
  protected void loadRules() {
    loadXMLRules(url);
  }
};

DigesterLoader loader = DigesterLoader.newLoader(rules);
Digester digester = loader.newDigester();

Notez que vous devez probablement rendre votre URL final pour l'utiliser dans la sous-classe anonyme.

Testé avec le fichier de règles simple suivant:

Requiert la déclaration DOCTYPE, mais fonctionne avec ou sans la déclaration XML. Exécuter sans la DOCTYPE donne:

Erreur d'analyse à la ligne 1 colonne 17: L'élément racine du document "digester-rules" doit correspondre à la racine DOCTYPE "null"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X