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

Langage Java Discussion :

Transformation d'un DOMSource en StreamSource


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Transformation d'un DOMSource en StreamSource
    Bonjour,

    j'ai besoin, dans le cadre de l'utilisation d'un Web Service, de transférer le contenu d'un DOMSource à un StreamSource, qui puisse être envoyé comme attachement.

    Hors, à ce jour, la seule méthode fonctionnelle trouvée est de passer par un fichier temporaire, en utilisant le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DOMSource domSource = new DOMSource(doc);
     
    StreamResult streamResult = 
        new StreamResult(new java.io.FileOutputStream("tmp_file.xml"));
    Transformer transformer =
        TransformerFactory.newInstance().newTransformer();
    transformer.transform(domSource, streamResult);
    File tmp_file = new File("tmp_file.xml");
     
    StreamSource attach = new StreamSource(tmp_file);
    Cette solution est très peu élégante et pourra poser des problèmes.

    Une autre solution aurait été de passer par un InputStream, cependant cette solution ne fonctionne pas, le Web Service renvoie une erreur "Unexpected end of file".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DOMSource domSource = new DOMSource(doc);
     
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    StreamResult streamResult = new StreamResult(os);
    Transformer transformer = 
        TransformerFactory.newInstance().newTransformer();
    transformer.transform(domSource, streamResult);
    InputStream is = new java.io.ByteArrayInputStream(os.toByteArray());
     
    StreamSource attach = new StreamSource(is);
    De ce fait, je me demande s'il existe d'autres solutions, ou si l'échec de la solution deux vient du Web Service. Bref de l'aide de quelqu'un connaissant le sujet serait appréciée

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    La solution était en fait de faire un flush et un close. Résolu donc (code fonctionnel ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DOMSource domSource = new DOMSource(doc);
    
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    StreamResult streamResult = new StreamResult(os);
    Transformer transformer = 
        TransformerFactory.newInstance().newTransformer();
    transformer.transform(domSource, streamResult);
    os.flush();
    os.close();
    InputStream is = new java.io.ByteArrayInputStream(os.toByteArray());
    
    StreamSource attach = new StreamSource(is);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 49
    Points : 39
    Points
    39
    Par défaut Server returned HTTP response code: 503 ...
    Bonjour,

    La solution était en fait de faire un flush et un close. Résolu donc (code fonctionnel ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DOMSource domSource = new DOMSource(doc);
    
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    StreamResult streamResult = new StreamResult(os);
    Transformer transformer = 
        TransformerFactory.newInstance().newTransformer();
    transformer.transform(domSource, streamResult);
    os.flush();
    os.close();
    InputStream is = new java.io.ByteArrayInputStream(os.toByteArray());
    
    StreamSource attach = new StreamSource(is);
    J'ai essayé la solution que tu as trouvée en la précédant de cette portion de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(true);
     
    DocumentBuilder builder = factory.newDocumentBuilder();
     
    URL url = new URL("http://www.langtag.net/");
    InputStream stream = url.openStream();
    Document doc = builder.parse(stream);
    Le programme s'arrête à la dernière ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Document doc = builder.parse(stream);
    et génère invariablement le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
    Ce n'est peut-êre plus le même problème que ce qui est indiqué par l'intitulé du post de départ mais est-ce que quelqu'un peut me proposer une solution pour contourner cet obstacle ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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