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:
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:
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 :)
Server returned HTTP response code: 503 ...
Bonjour,
Citation:
La solution était en fait de faire un flush et un close. Résolu donc (code fonctionnel ci-dessous).
Code:
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:
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:
Document doc = builder.parse(stream);
et génère invariablement le message suivant:
Code:
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 ?