- SOAP sta per PROTOCOLLO Simple Object Access
- SOAP è un protocollo di comunicazione applicazione
- SOAP è un formato per l'invio e la ricezione di messaggi
- SOAP è indipendente dalla piattaforma
- SOAP si basa su XML
- SOAP è una raccomandazione W3C
Perché SOAP?
E 'importante per le applicazioni web siano in grado di comunicare su Internet.
Il modo migliore per comunicare tra le applicazioni è su HTTP, perché HTTP è supportato da tutti i browser Internet e server. SOAP è stato creato per raggiungere questo obiettivo.
SOAP fornisce un modo per comunicare tra le applicazioni in esecuzione su sistemi operativi diversi, con diverse tecnologie e linguaggi di programmazione.
Building Blocks SOAP
Un messaggio SOAP è un documento XML ordinaria contenenti i seguenti elementi:
- Un elemento Busta che identifica il documento XML come messaggio SOAP
- Un elemento di intestazione che contiene le informazioni di intestazione
- Un elemento del corpo che contiene le informazioni di chiamata e la risposta
- Un elemento di errore contenente errori e le informazioni di stato
Tutti gli elementi di cui sopra sono dichiarati nello spazio dei nomi di default per la busta SOAP:
http://www.w3.org/2003/05/soap-envelope/
e lo spazio dei nomi predefinito per la codifica SOAP e tipi di dati è:
http://www.w3.org/2003/05/soap-encoding
Regole di sintassi
Ecco alcune regole di sintassi importanti:
- Un messaggio SOAP DEVE essere codificato usando XML
- Un messaggio SOAP devono utilizzare lo spazio dei nomi SOAP Envelope
- Un messaggio SOAP devono utilizzare lo spazio dei nomi SOAP Codifica
- Un messaggio SOAP non deve contenere un riferimento DTD
- Un messaggio SOAP non deve contenere istruzioni di elaborazione XML
Skeleton SOAP Message
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
La busta elemento SOAP
L'elemento SOAP Envelope richiesto è l'elemento principale di un messaggio SOAP. Questo elemento definisce il documento XML come messaggio SOAP.
Esempio
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
Il xmlns: Namespace sapone
Si noti la xmlns: namespace sapone nell'esempio di cui sopra. Si dovrebbe sempre avere il valore di: "http://www.w3.org/2003/05/soap-envelope/" .
Lo spazio dei nomi definisce la Busta come una busta SOAP.
Se viene utilizzato un namespace differente, l'applicazione genera un errore e scarta il messaggio.
Il encodingStyle attributo
Il encodingStyle attributo viene utilizzato per definire i tipi di dati utilizzati nel documento. Questo attributo può apparire su qualsiasi elemento SOAP, e si applica al contenuto dell'elemento e tutti gli elementi figlio.
Un messaggio SOAP non ha alcuna codifica predefinita.
Sintassi
soap:encodingStyle="URI"
Esempio
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
Il SOAP Header Element
L'elemento SOAP Header opzionale contiene informazioni specifiche dell'applicazione (like authentication, payment, etc) sul messaggio SOAP.
Se l'elemento di intestazione è presente, deve essere il primo elemento figlio dell'elemento Envelope.
Note: tutti gli elementi figlio immediati dell'elemento intestazione deve essere namespace-qualificati.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
L'esempio precedente contiene un'intestazione con un "Trans" elemento, un "mustUnderstand" attributo con un valore di 1, e un valore di 234.
SOAP definisce tre attributi nello spazio dei nomi di default. Questi attributi sono: mustUnderstand, attore, e encodingStyle.
Gli attributi definiti nel SOAP Header definisce come un destinatario deve elaborare il messaggio SOAP.
Il mustUnderstand attributo
L'attributo SOAP mustUnderstand può essere utilizzato per indicare se una voce di intestazione è obbligatorio o facoltativo per il destinatario da elaborare.
Se si aggiunge mustUnderstand = "1" per un elemento figlio dell'elemento intestazione indica che il ricevitore elaborazione del intestazione deve riconoscere l'elemento. Se il ricevitore non riconosce l'elemento fallirà durante l'elaborazione l'intestazione.
Sintassi
soap:mustUnderstand="0|1"
Esempio
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
L' actor attributo
Un messaggio SOAP può viaggiare da un mittente ad un ricevitore passando endpoint diversi lungo il percorso del messaggio. Tuttavia, non tutte le parti di un messaggio SOAP possono essere destinati per l'endpoint finale, invece, può essere destinato uno o più dei punti finali sul percorso del messaggio.
L'attributo SOAP attore viene utilizzato per affrontare l'elemento di intestazione di un endpoint specifico.
Sintassi
soap:actor="URI"
Esempio
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:actor="http://www.w3ii.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Il encodingStyle attributo
Il encodingStyle attributo viene utilizzato per definire i tipi di dati utilizzati nel documento. Questo attributo può apparire su qualsiasi elemento SOAP, e si applica ai contenuti di elementi e di tutti gli elementi figlio.
Un messaggio SOAP non ha alcuna codifica predefinita.
Sintassi
soap:encodingStyle="URI"
Il SOAP elemento BODY
L'elemento SOAP corpo richiesto, contiene il messaggio SOAP reale avente per l'endpoint finale del messaggio.
elementi figlio immediati dell'elemento SOAP corpo può essere namespace-qualificati.
Esempio
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3ii.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
L'esempio precedente richiede il prezzo delle mele. Si noti che il m: GetPrice e gli elementi suddetta voce sono elementi specifici dell'applicazione. Essi non sono una parte del namespace SOAP.
Una risposta SOAP potrebbe essere simile a questa:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
L'elemento Fault SOAP
L'elemento SOAP Fault opzionale viene utilizzato per indicare i messaggi di errore.
L'elemento SOAP Fault tiene errori e informazioni di stato per un messaggio SOAP.
Se un elemento di errore è presente, deve apparire come un elemento figlio dell'elemento corpo. Un elemento d'errore può apparire solo una volta in un messaggio SOAP.
L'elemento SOAP Fault ha i seguenti elementi secondari:
sub Element | Descrizione |
---|---|
<faultcode> | Un codice di identificazione del guasto |
<faultstring> | Una spiegazione leggibile del guasto |
<faultactor> | Informazioni su chi ha causato il guasto per accadere |
<detail> | Contiene applicazioni specifiche informazioni errore relativo all'elemento corpo |
Codici di errore SOAP
I valori FaultCode definite di seguito devono essere utilizzati nell'elemento faultcode quando descrive i difetti:
Errore | Descrizione |
---|---|
VersionMismatch | Trovato un namespace non valido per l'elemento SOAP Envelope |
MustUnderstand | Un elemento figlio diretto dell'elemento Header, con la mustUnderstand attributo impostato a "1" , non era compreso |
Client | Il messaggio è stato correttamente formata o conteneva informazioni non corrette |
Server | C'è stato un problema con il server in modo che il messaggio non ha potuto procedere |
Il protocollo HTTP
HTTP comunica tramite TCP / IP. Un client HTTP si connette a un server HTTP utilizzando il protocollo TCP. Dopo aver stabilito una connessione, il cliente può inviare un messaggio di richiesta HTTP al server:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
Il server elabora la richiesta e invia una risposta HTTP al client. La risposta contiene un codice di stato che indica lo stato della richiesta:
200 OK
Content-Type: text/plain
Content-Length: 200
Nell'esempio precedente, il server ha restituito un codice di stato 200. Questo è il codice successo standard per HTTP.
Se il server non ha potuto decodificare la richiesta, potrebbe avere qualcosa tornato in questo modo:
400 Bad Request
Content-Length: 0
SOAP Binding
La specifica SOAP definisce la struttura dei messaggi SOAP, non come vengono scambiati. Questo divario è riempito da quello che viene chiamato "SOAP Bindings" . binding SOAP sono meccanismi che permettono messaggi SOAP per essere effettivamente scambiati utilizzando un protocollo di trasporto.
La maggior parte delle implementazioni SOAP forniscono associazioni per i protocolli di trasporto comuni, come HTTP o SMTP.
HTTP è sincrona e ampiamente utilizzato. Una richiesta HTTP SOAP specifica di almeno due intestazioni HTTP: Content-Type e Content-Length.
SMTP è asincrona ed è usato in ultima istanza o casi particolari.
Implementazioni Java di sapone di solito forniscono un legame specifico per la JMS (Java Messaging System) protocollo.
Tipo di contenuto
L'intestazione Content-Type per una richiesta e risposta SOAP definisce il tipo MIME per il messaggio e la codifica dei caratteri (optional) utilizzato per il corpo XML della richiesta o di risposta.
Sintassi
Content-Type: MIMEType; charset=character-encoding
Esempio
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
L'intestazione Content-Length per una richiesta e risposta SOAP specifica il numero di byte nel corpo della richiesta o di risposta.
Sintassi
Content-Length: bytes
Esempio
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
A Soap Esempio
Nell'esempio sottostante, una richiesta di GetStockPrice viene inviato a un server. La richiesta ha un parametro StockName, e un parametro prezzo che verrà restituito nella risposta. Lo spazio dei nomi per la funzione è definita in "http://www.example.org/stock" .
Una richiesta SOAP:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
La risposta SOAP:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>