2014-04-22 23 views
18

使用Spring WS獲得StreamResult如下轉換StreamResult字符串或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; 

我得到的結果,但我想它解壓到某種XML,甚至作爲一個字符串(只是想看到內容以便生成響應)。

我該怎麼做?

+1

http://stackoverflow.com/questions/22939440/how-to-get-soap-response-from-webservicetemplate/22939680#22939680可能有助於 – VirtualTroll

回答

32

試試這個:

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

您可以使用getReader()獲取StreamSource的讀者。然後,您應該可以使用read(char [] cbuf)將流的內容寫入字符數組,該字符數組可以很容易地轉換爲字符串並根據需要打印到控制檯。

+0

我感興趣的只是StreamResult – user1609085

+0

StreamResult是一個作家班,你在傳遞給它的所有數據時,不能從編寫器類獲取任何數據。並不存儲數據。請參閱此處的定義:http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stream/StreamResult.html –

2

如果沒有這些作品,試試這個

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

假設你有這樣的結構,

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

你可以試試這個方法,雖然同樣的事情,想明確指出

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