IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Sax plante la 2ème fois !


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Par défaut Sax plante la 2ème fois !
    Bonjour à tous !

    J'ai fait cette méthode qui transforme un XML en un autre XML en passant par un XSL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     public XmlNode getCreateXml() throws DfException, SAXException, IOException, TransformerException
        {
            String result = null;
     
            XMLReader analyseurSax = XMLReaderFactory.createXMLReader();
            InputStream fis =  new FileInputStream(xsl.getFile(null));
            InputSource sourceEntreeXSL = new InputSource(fis);
            SAXSource sourceXSL = new SAXSource(analyseurSax, sourceEntreeXSL);
     
            XmlDocument xmlDoc = new XmlDocument();
            InputSource sourceEntreeXML = new InputSource(xmlDoc.getInputStream());
            SAXSource sourceXML = new SAXSource(analyseurSax, sourceEntreeXML);
     
            TransformerFactory fabrique = TransformerFactory.newInstance();
            Transformer transformateur = fabrique.newTransformer(sourceXSL);
     
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
     
            Result sortie = new StreamResult(baos);
            transformateur.transform(sourceXML, sortie);
     
            result = new String(baos.toByteArray());
     
            //analyseurSax.
            fis.close();
            baos.flush();
            baos.close();
    Le problème c'est que ma méthode plante la deuxième fois ou je la lance et j'ai une erreur du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: java.lang.IllegalStateException: can't declare any more prefixes in this context
    	at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:805)
    Je pense que je ne ferme pas bien quelque chose genre un OutputStream mais je n'arrive pas à savoir quoi !

    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Par défaut
    Salut,

    Si je ne me trompe pas on peut avoir des problème de synchronisation avec SAX et le process XML/XSL qui ne sont pas threadsafe.

    Si tu n'es pas à l'aise avec la synchronization, va jetter un petit coup d'oeil sur un tutoriel. Mais je pense qu'il faut au minimum mettre la création du transformer en synchronized.

    Ce qui te donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public XmlNode getCreateXml() throws DfException, SAXException, IOException, TransformerException
        {
            String result = null;
     
            XMLReader analyseurSax = XMLReaderFactory.createXMLReader();
            InputStream fis =  new FileInputStream(xsl.getFile(null));
            InputSource sourceEntreeXSL = new InputSource(fis);
            SAXSource sourceXSL = new SAXSource(analyseurSax, sourceEntreeXSL);
     
            XmlDocument xmlDoc = new XmlDocument();
            InputSource sourceEntreeXML = new InputSource(xmlDoc.getInputStream());
            SAXSource sourceXML = new SAXSource(analyseurSax, sourceEntreeXML);
     
            synchronized(this)
    	{
                TransformerFactory fabrique = TransformerFactory.newInstance();
                Transformer transformateur = fabrique.newTransformer(sourceXSL);
            }
     
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
     
            Result sortie = new StreamResult(baos);
            transformateur.transform(sourceXML, sortie);
            
            result = new String(baos.toByteArray());
            
            //analyseurSax.
            fis.close();
            baos.flush();
            baos.close();

Discussions similaires

  1. [XL-2007] On error ne marche pas la 2ème fois
    Par Halo2550 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/01/2019, 09h19
  2. Le programme plante une fois en JAR
    Par oneagaindoguys dans le forum Général Java
    Réponses: 0
    Dernier message: 01/06/2010, 15h50
  3. Requête Json qui ne marche qu'à partir de la 2ème fois
    Par Turbulator dans le forum jQuery
    Réponses: 2
    Dernier message: 05/10/2009, 12h10
  4. Fileupload qui fonctionne au bout de la 2ème fois
    Par Risike dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/06/2009, 08h50
  5. Pb ds affichage d'images ds la 2ème fois
    Par login1919 dans le forum JDeveloper
    Réponses: 2
    Dernier message: 16/01/2008, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo