Come posso ottenere lo stato HTTP dal risultato dello SOAPConnection.call()
?Come ottenere il codice di stato HTTP dalla risposta SOAP
risposta
Tratto da W3C note on SOAP (Section 6.2)
SOAP HTTP segue la semantica dei codici di stato HTTP per comunicare le informazioni sullo stato in HTTP. Ad esempio, un codice di stato 2xx indica che la richiesta del cliente inclusa la componente SOAP è stato ricevuto con successo, compreso e accettato ecc
In caso di un errore SOAP durante l'elaborazione della richiesta, il server HTTP SOAP deve emettere una risposta HTTP 500 "Errore interno del server" e includono un messaggio SOAP nella risposta contenente un elemento di errore SOAP (vedere la sezione 4.4) che indica l'errore di elaborazione SOAP.
E da documentation on SOAPFault in the API
Un elemento nell'oggetto SOAPBody che contiene di errore e/o lo stato informazioni. Queste informazioni possono riguardare errori nell'oggetto SOAPMessage o problemi non correlati al contenuto nel messaggio stesso.
Quindi, una possibile risposta potrebbe essere
SoapMessage soapMessage = null;
soapMessage = MySOAPConnection.call(...);
soapMessage.getSOAPPart().getEnvelope().getBody().getFault().getFaultCode();
Alcuni riferimenti che mi ha aiutato a creare questa risposta sono:
Sì. Ma che cosa è "soapMessage.getSOAPPart(). GetEnvelope(). GetBody(). GetFault(). GetFaultCode()" fa sta dando il codice di errore che è nella risposta SOAP. Sebbene le intestazioni HTTP non siano all'interno della stessa risposta SOAP. Quindi, utilizzando questo metodo, il codice di stato HTTP non può essere estratto, non è vero? – asthiwanka
Si può ge t accedere alle intestazioni HTTP attraverso l'interfaccia MessageContext.
http://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/MessageContext.html
La via da seguire più diritta è probabilmente quello di realizzare un SOAPHandler che vi darà accesso al MessageContext:
http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/handlers.html#wp222394
Tuttavia, le applicazioni SOAP non sono generalmente tenuti a costruire l'interazione sui codici di stato HTTP come quelli sono specifici del trasporto.
La semplice risposta è che non è possibile. Scavando nel codice HttpSOAPConnection, un'istanza locale di un oggetto HttpURLConnection viene utilizzata per eseguire la comunicazione effettiva con il servizio di destinazione. Questo ottiene il codice httpResponse ma lo nasconde più o meno completamente dal chiamante. Tutto quello che si conclude è che se non si ottiene un'eccezione ma il SOAPMessage restituito contiene un SOAPFault, il codice di ritorno era HttpURLConnection.HTTP_INTERNAL_ERROR (cioè 500). Nessuna eccezione e nessun SOAPFault significa che il codice di ritorno era compreso tra 200 e 206, che sono tutti "SUCCESSO" - sfortunatamente la voce di stato dalle intestazioni HTTP nell'oggetto HttpURLConnection non è esplicitamente copiata nelle MIMEHeaders nel SOAPMessage restituito ...
// Header field 0 is the status line so we skip it.
Tutto il resto solleverà un'eccezione e il codice inizierà dopo la parentesi aperta nel campo del messaggio di eccezione ed è probabilmente tre cifre, è difficile essere precisi, perché qualcuno ha dimenticato la stretta staffa o di qualsiasi altro separatore prima che il messaggio ...
throw new SOAPExceptionImpl(
"Bad response: ("
+ responseCode
+ httpConnection.getResponseMessage());
Ad esempio:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (502internal error - server connection terminated
è orribile basandosi sulla formattazione di un messaggio di testo in un'eccezione, b il codice di risposta non è esposto altrove.
Ho una richiesta simile a questa domanda, analista di business desidera registrare ogni codice di risposta http relativo a tutte le chiamate di sapone in entrata e in uscita. La mia risposta è valida per Apache CXF 2.7.5.
È possibile accedere al codice di stato http tramite l'interfaccia MessageContext dal frammento di codice seguente in un'implementazione dell'interfaccia javax.xml.ws.handler.soap.SoapHandler.
int status = ((javax.servlet.http.HttpServletResponse)messageContext.get("HTTP.RESPONSE")).getStatus();
- 1. Come ottenere il codice di stato della risposta da jQuery.ajax?
- 2. Codice risposta risposta Http Android
- 3. 502 codice di stato HTTP
- 4. Codice stato risposta Web
- 5. Ottenere una descrizione per il codice di stato HTTP
- 6. Risposta null dalla richiesta HTTP HTTP
- 7. HttpClient ottenere il codice di stato
- 8. System.Net.WebException codice di stato HTTP
- 9. di analisi SOAP risposta
- 10. di analisi codice di stato HTTP
- 11. Il server ha restituito il codice di risposta HTTP: 400
- 12. Assert restituito il codice di stato HTTP 400 come successo
- 13. codice di stato HTTP HEAD del verbo
- 14. Elaborazione della risposta SOAP
- 15. fa il nome di un codice di stato HTTP importa
- 16. Come posso vedere il codice di stato HTTP dalla richiesta fatta da page.open?
- 17. RestSharp - Come ottengo il codice numerico di risposta http?
- 18. Come leggere l'intestazione HTTP dalla risposta utilizzando l'API .NET HttpWebRequest?
- 19. Estensione Chrome - Come ottenere il corpo della risposta HTTP?
- 20. Che cos'è il codice di stato HTTP 000?
- 21. Richiesta HTTP SOAP PHP
- 22. PHP ottiene il codice di risposta dell'header http senza cURL
- 23. Come posso ottenere il codice di stato HTTP da un ServletResponse in un ServletFilter?
- 24. Codice di stato HTTP in corso?
- 25. Ottenere un codice di stato http vuoto 500 dall'API Web
- 26. Ottenere codice di stato HTTP da Selenium WebDriver C#
- 27. Qual è l'esatta struttura di risposta per il codice di stato HTTP 300 (Scelte multiple)?
- 28. Come ottenere il messaggio di stato HTTP in (py) curl?
- 29. Codice di stato HTTP per Captcha
- 30. Ottieni il codice di stato HTTP o le intestazioni di risposta dal tag <img>?
javax.xml.soap.SOAPConnection ha questo metodo chiamato "call()" e restituisce un SOAPMesage. Un messaggio SOAP può avere varie risposte. Ad esempio un messaggio con HTTP 200, HTTP 500, ecc. Ho bisogno di capire il codice HTTP dal detto SOAPMessage. – asthiwanka
Penso che, riceverai 'SOAPException' è' http status' sarà diverso da '200 OK'. – Andremoniy