Utilisation de Spring WS pour obtenir le StreamResult comme ci-dessous
StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult("http://someUri",
source, new SoapActionCallback("someCallBack"), result);
return result;
J'obtiens le résultat, mais je veux l'extraire dans une sorte de xml ou même sous forme de chaîne (je veux juste voir le contenu afin de générer la réponse).
Comment puis-je faire ceci?
Essaye celui-là:
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();
}
Vous pouvez obtenir le lecteur de votre StreamSource en utilisant getReader (). Vous devriez alors pouvoir utiliser read (char [] cbuf) pour écrire le contenu du flux dans un tableau de caractères qui peut facilement être converti en chaîne et imprimé sur la console si vous le souhaitez.
Si aucun de ces travaux, essayez ceci
System.out.println(result.getOutputStream().toString());
En supposant que vous ayez ce genre de structure,
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;
}
Vous pouvez essayer de cette façon, même si la même chose, je voulais le souligner clairement
System.out.println(printSOAPResponse(soapResponse).getOutputStream().toString());
Si vous utilisez Spring, vous pouvez également utiliser cette méthode:
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;
}