web-dev-qa-db-ja.com

StreamResultを文字列またはxmlに変換します

以下のように、スプリングWSを使用してStreamResultを取得します

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または文字列として抽出することもできます(応答を生成するためにコンテンツを確認したいだけです)。

これどうやってするの?

24
user1609085

これを試してください:

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

GetReader()を使用して、StreamSourceのリーダーを取得できます。その後、read(char [] cbuf)を使用して、ストリームの内容を文字配列に書き込むことができます。文字配列は、必要に応じて文字列に簡単に変換し、コンソールに出力できます。

5
Lex Webb

これらのいずれも機能しない場合は、これを試してください

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());
2
murasing

Springを使用する場合は、次の方法も使用できます。

    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