- SOAP significa Simple Object Access P rotocolo
- SOAP é um protocolo de comunicação da aplicação
- SOAP é um formato para envio e recebimento de mensagens
- SOAP é independente de plataforma
- SOAP é baseado em XML
- SOAP é uma recomendação W3C
Por sabão?
É importante para aplicações web para ser capaz de comunicar através da Internet.
A melhor maneira de se comunicar entre aplicações é sobre HTTP, porque HTTP é suportado por todos os navegadores e servidores da Internet. SABÃO foi criado para alcançar este objetivo.
SABÃO fornece uma maneira de se comunicar entre aplicativos executados em diferentes sistemas operacionais, com diferentes tecnologias e linguagens de programação.
SABÃO Building Blocks
Uma mensagem SOAP é um documento XML comum contendo os seguintes elementos:
- Um elemento envelope que identifica o documento XML como uma mensagem SOAP
- Um elemento de cabeçalho que contém informações de cabeçalho
- Um elemento do corpo que contém chamada e resposta informações
- Um elemento Fault contendo erros e informações de status
Todos os elementos acima são declarados no namespace padrão para o envelope SOAP:
http://www.w3.org/2003/05/soap-envelope/
e o namespace padrão para codificação SOAP e tipos de dados é:
http://www.w3.org/2003/05/soap-encoding
Regras de sintaxe
Aqui estão algumas regras de sintaxe importantes:
- Uma mensagem SOAP deve ser codificado usando XML
- Uma mensagem SOAP deve usar o namespace de SOAP Envelope
- Uma mensagem SOAP deve usar o namespace de codificação SOAP
- Uma mensagem SOAP não deve conter uma referência DTD
- Uma mensagem SOAP não deve conter instruções de processamento XML
Esqueleto mensagem SOAP
<?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>
O elemento envelope SOAP
O elemento de SOAP Envelope necessário é o elemento raiz de uma mensagem SOAP. Este elemento define o documento XML como uma mensagem SOAP.
Exemplo
<?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>
O xmlns: Namespace sabão
Observe o xmlns: namespace sabão no exemplo acima. Deve-se sempre ter o valor de: "http://www.w3.org/2003/05/soap-envelope/" .
O namespace define o envelope como um envelope SOAP.
Se um namespace diferente é usado, o aplicativo gera um erro e descarta a mensagem.
O encodingStyle Atributo
O encodingStyle atributo é usado para definir os tipos de dados utilizados no documento. Este atributo pode aparecer em qualquer elemento SOAP, e aplica-se o conteúdo do elemento e todos os elementos filho.
Uma mensagem SOAP não tem nenhuma codificação padrão.
Sintaxe
soap:encodingStyle="URI"
Exemplo
<?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>
O cabeçalho do elemento SABÃO
O elemento de SOAP cabeçalho opcional contém informações específicas do aplicativo (like authentication, payment, etc) sobre a mensagem SOAP.
Se o elemento de cabeçalho está presente, ele deve ser o primeiro elemento filho do elemento Envelope.
Note: Todos os elementos filho imediato do elemento Header deve ser qualificado por namespace.
<?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>
O exemplo acima contém um cabeçalho com um "Trans" elemento, um "mustUnderstand" atributo com um valor de 1, e um valor de 234.
SABÃO define três atributos no namespace padrão. Estes atributos são: mustUnderstand, ator e encodingStyle.
Os atributos definidos no cabeçalho SOAP define como um destinatário deve processar a mensagem SOAP.
O mustUnderstand Atributo
O atributo SABÃO mustUnderstand pode ser usado para indicar se uma entrada de cabeçalho é obrigatória ou opcional para o destinatário processar.
Se você adicionar mustUnderstand = "1" para um elemento filho do elemento cabeçalho indica que o receptor processar o cabeçalho deve reconhecer o elemento. Se o receptor não reconhece o elemento que irá falhar ao processar o cabeçalho.
Sintaxe
soap:mustUnderstand="0|1"
Exemplo
<?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>
O actor Atributo
Uma mensagem de sabão pode viajar a partir de um remetente para um receptor que passa por diferentes pontos de extremidade ao longo do caminho da mensagem. No entanto, nem todas as partes de uma mensagem de sabão pode ser destinado para o ponto de extremidade final, em vez disso, ele pode ser destinado para um ou mais dos pontos de extremidade sobre o caminho da mensagem.
O atributo SABÃO ator é usado para tratar o elemento de cabeçalho para um ponto de extremidade específico.
Sintaxe
soap:actor="URI"
Exemplo
<?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>
O encodingStyle Atributo
O encodingStyle atributo é usado para definir os tipos de dados utilizados no documento. Este atributo pode aparecer em qualquer elemento SOAP, e ele será aplicado ao conteúdo desse elemento e todos os elementos filho.
Uma mensagem SOAP não tem nenhuma codificação padrão.
Sintaxe
soap:encodingStyle="URI"
O elemento do corpo de SOAP
O elemento sabonete necessária contém a mensagem SOAP real destinado ao desfecho final da mensagem.
elementos filho imediato do elemento sabonete pode ser qualificado por namespace.
Exemplo
<?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>
O exemplo acima solicita o preço das maçãs. Note que o m: getPrice e os elementos item acima são elementos específicos do aplicativo. Eles não são uma parte do espaço de nomes SOAP.
A resposta SOAP poderia ser algo como isto:
<?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>
O elemento SOAP Fault
O elemento de falha SOAP opcional é usado para indicar a mensagens de erro.
O elemento falha SOAP contém erros e informações de status para uma mensagem SOAP.
Se um elemento de falha está presente, ele deve aparecer como um elemento filho do elemento do corpo. Um elemento falha só pode aparecer uma vez em uma mensagem SOAP.
O elemento falha SOAP tem as seguintes sub elementos:
sub Elemento | Descrição |
---|---|
<faultcode> | Um código de identificação da falha |
<faultstring> | Uma explicação legível humana da falha |
<faultactor> | Informações sobre quem causou a falha acontecer |
<detail> | Detém aplicação específica informações de erro relacionado com o elemento do corpo |
Códigos de falha SOAP
Os valores FaultCode definidos abaixo deve ser usado no elemento faultcode ao descrever falhas:
Erro | Descrição |
---|---|
VersionMismatch | Encontrou um namespace inválida para o elemento de SOAP Envelope |
MustUnderstand | Um elemento filho imediato do elemento cabeçalho, com o mustUnderstand atributo definido como "1" , não foi compreendido |
Client | A mensagem foi incorretamente formada ou continha informações incorrectas |
Server | Houve um problema com o servidor para que a mensagem não poderia prosseguir |
O protocolo HTTP
HTTP comunica através de TCP / IP. Um cliente HTTP se conecta a um servidor HTTP usando TCP. Depois de estabelecer uma conexão, o cliente pode enviar uma mensagem de solicitação HTTP para o servidor:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
O servidor processa o pedido e envia uma resposta HTTP de volta ao cliente. A resposta contém um código de status que indica o status da solicitação:
200 OK
Content-Type: text/plain
Content-Length: 200
No exemplo acima, o servidor devolvido um código de estado de 200. Este é o código de sucesso para HTTP padrão.
Se o servidor não pôde decodificar a solicitação, ele poderia ter retornado algo como isto:
400 Bad Request
Content-Length: 0
vinculação SOAP
A especificação SOAP define a estrutura das mensagens SOAP, não como eles são trocados. Esta lacuna é preenchida por aquilo que é chamado de "SOAP Bindings" . ligações SOAP são mecanismos que permitem mensagens SOAP a ser efetivamente trocadas usando um protocolo de transporte.
A maioria das implementações de SOAP fornecer ligações para protocolos de transporte comuns, como HTTP ou SMTP.
O HTTP é síncrono e amplamente utilizado. A solicitação HTTP SABÃO especifica pelo menos dois cabeçalhos HTTP: Content-Type e Content-Length.
SMTP é assíncrono e é utilizado em última instância ou casos particulares.
Implementações de Java de sabão geralmente fornecem uma ligação para o JMS específico (Java Messaging System) protocolo.
Tipo de conteúdo
O cabeçalho Content-Type para uma solicitação e resposta SOAP define o tipo MIME para a mensagem ea codificação de caracteres (optional) utilizado para o corpo XML do pedido ou resposta.
Sintaxe
Content-Type: MIMEType; charset=character-encoding
Exemplo
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
O cabeçalho Content-Length para uma solicitação e resposta SOAP especifica o número de bytes no corpo do pedido ou resposta.
Sintaxe
Content-Length: bytes
Exemplo
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
Um Exemplo de SOAP
No exemplo abaixo, um pedido GetStockPrice é enviado para um servidor. O pedido tem um parâmetro StockName e um preço parâmetro que será devolvido na resposta. O espaço de nomes para a função é definida em "http://www.example.org/stock" .
A solicitação 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>
A resposta 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>