(Kontynuacja tego pytania: Getting raw XML response from Java web service client)Jak mogę przekazać dane z procedury obsługi SOAP do klienta usługi WWW?
Posiadam obsługę wiadomości SOAP, która jest w stanie uzyskać nieprzetworzony kod XML odpowiedzi serwisu WWW. Muszę pobrać ten XML do klienta usługi sieciowej, aby móc wykonać niektóre transformacje XSL na odpowiedź, zanim wyślę ją na swój sposób. Mam problem z wymyśleniem dobry sposób na uzyskanie danych z obsługi SOAP, który przechwytuje wiadomości przychodzących, i udostępnia surowego XML dla wygenerowanego (z WSDL) klienta usługi sieci Web. Wszelkie pomysły, jeśli jest to możliwe?
mam wymyślić coś takiego:
public class CustomSOAPHandler implements javax.xml.ws.handler.soap.SOAPHandler<javax.xml.ws.handler.soap.SOAPMessageContext>
{
private String myXML;
public String getMyXML()
{
return myXML;
}
...
public boolean handleMessage(SOAPMessageContext context)
{
...
myXML = this.getRawXML(context.getMessage());
}
//elsewhere in the application:
...
myService.doSomething(someRequest);
for (Handler h: ((BindingProvider)myService).getBinding().getHandlerChain())
{
if (h instanceof CustomSOAPHandler)
{
System.out.println("HandlerResult: "+ ((CustomSOAPHandler)h).getMyXML());
}
}
W bardzo prostych testów, to wydaje się działać. Ale to rozwiązanie wydaje się trochę jak tani hack. Nie lubię ustawiania surowego XML jako członka obsługi łańcucha i mam przeczucie, że to narusza wiele innych najlepszych praktyk. Czy ktoś ma bardziej elegancki sposób robienia tego?
Czy można ustawić obiekt DOM w HttpSession? – davidfmatheson
@davidfmatheson: Może, ale dlaczego miałbym używać obiektu DOM zamiast łańcucha, czego tak naprawdę chcę? – FrustratedWithFormsDesigner