web-dev-qa-db-fra.com

Convertir StreamResult en chaîne ou xml

Utilisation de Spring WS pour obtenir le StreamResult comme ci-dessous

StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult("http://someUri", 
                source, new SoapActionCallback("someCallBack"), result); 
return result;

J'obtiens le résultat, mais je veux l'extraire dans une sorte de xml ou même sous forme de chaîne (je veux juste voir le contenu afin de générer la réponse).

Comment puis-je faire ceci?

24
user1609085

Essaye celui-là:

try {
    StreamSource source = new StreamSource(new StringReader("<xml>blabla</xml>"));
    StringWriter writer = new StringWriter();
    StreamResult result = new StreamResult(writer);
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    transformer.transform(source,result);
    String strResult = writer.toString();
} catch (Exception e) {
    e.printStackTrace();
}
41
Asif Bhutto

Vous pouvez obtenir le lecteur de votre StreamSource en utilisant getReader (). Vous devriez alors pouvoir utiliser read (char [] cbuf) pour écrire le contenu du flux dans un tableau de caractères qui peut facilement être converti en chaîne et imprimé sur la console si vous le souhaitez.

5
Lex Webb

Si aucun de ces travaux, essayez ceci

System.out.println(result.getOutputStream().toString());

En supposant que vous ayez ce genre de structure,

private static StreamResult printSOAPResponse(SOAPMessage soapResponse) throws Exception {
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    Source sourceContent = soapResponse.getSOAPPart().getContent();
    System.out.print("\nResponse SOAP Message = ");
    StreamResult result = new StreamResult(System.out);
    transformer.transform(sourceContent, result);
    return result;
}

Vous pouvez essayer de cette façon, même si la même chose, je voulais le souligner clairement

System.out.println(printSOAPResponse(soapResponse).getOutputStream().toString());
2
murasing

Si vous utilisez Spring, vous pouvez également utiliser cette méthode:

    import org.springframework.core.io.Resource;
    import org.Apache.commons.io.IOUtils;
    ....    
    @Value("classpath:/files/dummyresponse.xml")
    private Resource dummyResponseFile;
    ....
    public String getDummyResponse() {
        try {
            if (this.dummyResponse == null)
                dummyResponse = IOUtils.toString(dummyResponseFile.getInputStream(),StandardCharsets.UTF_8);
        }  catch (IOException e) {
            logger.error("Fehler in Test-Service: {}, {}, {}", e.getMessage(), e.getCause(), e.getStackTrace());
            throw new RuntimeException(e);
        }
        return dummyResponse;
    }
1
the hand of NOD