services mkyong jax example ejemplo consume java spring-mvc soap spring-ws

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