2014-04-22 29 views
18

Korzystanie ws wiosenne uzyskać StreamResult jak poniżejKonwersja StreamResult ciąg lub XML

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

mogę uzyskać wynik, ale chcę, aby wyodrębnić go do jakiejś XML lub nawet jako ciąg znaków (tylko chcesz zobacz zawartość w celu wygenerowania odpowiedzi).

Jak mogę to zrobić?

+1

http://stackoverflow.com/questions/22939440/how-to-get-soap-response-from-webservicetemplate/22939680#22939680 może pomóc – VirtualTroll

Odpowiedz

32

Spróbuj tego:

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(); 
} 
4

Możesz pobrać czytnik swojego StreamSource za pomocą metody getReader(). Powinieneś wtedy móc użyć read (char [] cbuf), aby napisać zawartość strumienia do tablicy znaków, która może być łatwo przekształcona w ciąg znaków i wydrukowany na konsoli, jeśli chcesz.

+0

Jestem zainteresowany tylko StreamResult – user1609085

+0

StreamResult jest klasą pisarz, ty nie może uzyskać żadnych danych z klasy pisarzy, ponieważ przekazuje wszystkie dane przekazane do niej. I nie przechowuje danych. Zobacz definicję tutaj: http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stream/StreamResult.html –

2

Jeśli żadna z tych prac, spróbuj tego

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

Zakładając, że tego rodzaju konstrukcji,

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; 
} 

można spróbować w ten sposób , chociaż to samo, chciał wskazać to jasno

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