java - mkyong - spring web services soap
Convertir StreamResult a cadena o xml (4)
Usando spring ws para obtener el StreamResult como abajo
StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult("http://someUri",
source, new SoapActionCallback("someCallBack"), result);
return result;
Obtengo el resultado, pero quiero extraerlo a algún tipo de xml o incluso como una cadena (solo quiero ver el contenido para generar la respuesta).
¿Cómo puedo hacer esto?
Prueba este:
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();
}
Puede obtener el lector de su StreamSource utilizando getReader (). Entonces deberías poder usar read (char [] cbuf) para escribir el contenido del flujo en una matriz de caracteres que se puede convertir fácilmente en una cadena e imprimir en la consola si lo deseas.
Si nada de esto funciona, prueba esto.
System.out.println(result.getOutputStream().toString());
Suponiendo que tenga este tipo de estructura,
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;
}
Puedes intentarlo de esta manera, aunque lo mismo, quisieras señalarlo claramente.
System.out.println(printSOAPResponse(soapResponse).getOutputStream().toString());
Si usas Spring también podrías usar de esta manera:
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;
}