Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Servidor Sistemas web XML Web Services SOAP SOAP Simple Object Access Protocol • SOAP é um protocolo simples para troca de informação em ambientes heterogêneos, distribuídos e descentralizados • Define um mecanismo simples, baseado em XML, para• Define um mecanismo simples, baseado em XML, para envio/recebimento de informações em aplicações diversas • O SOAP pode ser usado com uma variedade de outros protocolos que descrevem como uma “SOAP message” pode ser levada de um ponto a outro. o HTTP é o mais comum SOAP Estrutura de Uma Mensagem Envelope Header (Cabeçalho, opcional) Envelope Header (Cabeçalho, opcional) HTTP Body (Corpo, requerido) Fault (Falha, opcional) Body (Corpo, requerido) Fault (Falha, opcional) SOAPSOAP SOAP/HTTPSOAP/HTTP SOAP � ENVELOPE • Possui o nome do elemento(envelope), seguido pelas definições de namespace que identificam elementos de outras tecnologias � HEADER • Contém informações dos intermediários(quando a mensagem não vai direto para seu destino e sim passa por alguns nós anteriores)vai direto para seu destino e sim passa por alguns nós anteriores) � BODY • Contém as informações para o destino final. Pode ser composto de um conjunto de entradas representando as informações SOAP Papel Stub � Stub é a camada que fica ao lado da aplicação cliente e ao lado do servidor � Em ambos lados, encapsula os procedimentos necessários para levar e receber uma chamada de operação Do lado cliente, disponibiliza a interface remota� Do lado cliente, disponibiliza a interface remota � Dá a transparência ao cliente, fazendo com que a chamada se pareça local � Pode ser gerado de forma automática, a partir de uma definição de interface, por compiladores especializados denominados stub compilers, utilizando linguagem própria SOAP Stub (*) Interface do serviço (*) Chamada do método do objeto deserviço remoto é como se o objeto fosse local ao Client. <?xml version="1.0" encoding="UTF-8"?> SOAP/HTTP (Requisição: cliente->servidor) POST /axis/services/ServicoLivraria HTTP/1.0 Host: 192.168.0.129:8080 Content-Type: text/xml; charset=utf-8 User-Agent: Axis/1.1 Content-Length: 444 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:consultarLivro soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://biblio"> <isbn xsi:type="xsd:string">1</isbn> </ns1:consultarLivro> </soapenv:Body> </soapenv:Envelope> package biblio; public interface Livraria extends java.rmi.Remote { public biblio.Livro consultarLivro(java.lang.String isbn) throws java.rmi.RemoteException; public java.util.Vector consultarISBNs() throws java.rmi.RemoteException; } Serialização SOAP (serialização do método) <consultarLivro xmlns="http://biblio"> <isbn>12</isbn> </consultarLivro Módulo V <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <consultarLivro xmlns="http://biblio"> SOAP (empacotamento SOAP) <consultarLivro xmlns="http://biblio"> <isbn>12</isbn> </consultarLivro </soapenv:Body> </soapenv:Envelope> Módulo V <?xml version="1.0" encoding="UTF-8"?> SOAP/HTTP (Requisição HTTP) POST /axis/services/ServicoLivraria HTTP/1.0 Host: 192.168.0.129:8080 Content-Type: text/xml; charset=utf-8 User-Agent: Axis/1.1 Content-Length: 444 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <consultarLivro xmlns="http://biblio"> <isbn>12</isbn> </consultarLivro </soapenv:Body> </soapenv:Envelope> Módulo V SOAP/HTTP (Resposta HTTP:servidor -> cliente) HTTP/1.1 200 OK Content-Type text/xml;charset=utf-8 Date Mon, 17 Jul 2004 01:48:59 GMT Server Apache-Coyote/1.1 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema“ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body><soapenv:Body> <consultarLivroResponse xmlns="http://biblio"> <consultarLivroReturn> <ano>2005</ano> <editora>Editora Campus</editora> <isbn>12</isbn> <titulo>Programando em XML</titulo> </consultarLivroReturn> </consultarLivroResponse> </soapenv:Body> </soapenv:Envelope> Módulo V SOAP (Resposta SOAP) <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema“ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <consultarLivroResponse xmlns="http://biblio"> <consultarLivroReturn><consultarLivroReturn> <ano>2005</ano> <editora>Editora Campus</editora> <isbn>12</isbn> <titulo>Programando em XML</titulo> </consultarLivroReturn> </consultarLivroResponse> </soapenv:Body> </soapenv:Envelope> Módulo V Serialização SOAP (serialização do objeto devolvido) package biblio; public class Livro implements java.io.Serializable { private int ano; private java.lang.String editora; private java.lang.String isbn; private java.lang.String titulo; <consultarLivroReturn> <ano>2005</ano> <editora>Editora Campus</editora> <isbn>12</isbn> <titulo>Programando em XML</titulo> </consultarLivroReturn> Módulo V � O elemento SOAP Fault é usado para tratar erros e informações de status para uma mensagem SOAP SOAP Fault mensagem SOAP Módulo V � Uma mensagem de erro de uma mensagem SOAP é inserida numa estrutura de um elemento SOAP Fault Se um elemento Fault está presente, ele deve ser SOAP Fault � Se um elemento Fault está presente, ele deve ser inserido dentro de um elemento Body. Um elemento Fault somente pode estar presente uma vez na estrutura de mensagem. Módulo V � O elemento SOAP Fault tem os seguintes sub-elementos: <faultcode> Elementos de SOAP Fault � <faultcode> Um código que identifica a falha/tipo da exceção. Módulo V � <faultstring> A mensagem de exceção Elementos de SOAP Fault � <detail> Informações complementares da exceção. . Módulo V <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> SOAP (Resposta c/exceção) <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>java.lang.Exception: Erro ws:Livro Nao Encontrado</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">S2</ns1:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> Módulo V Framework AXIS (incluído no Eclipse) • O framework AXIS provê um conjunto de classes necessárias para o desenvolvimento e execução de serviços Web na plataforma Java, em ambos os lados, cliente e servidor • Do lado do servidor, o AXIS oferece toda a infra-estrutura de software necessária à integração com um container Javasoftware necessária à integração com um container Java • Do lado do cliente, o AXIS disponibiliza as camadas de software necessárias para o empacotamento, envio e recebimento de chamadas de operações aos serviços • Disponibiliza ferramentas utilitárias para a geração das classes auxiliares que vão estar diretamente integradas à aplicação cliente Framework AXIS (incluído no Eclipse) Classes Geradas Automáticas Aplicação Cliente Web Service Desenvolvido Desenvolvido Lado do Cliente Lado Servidor
Compartilhar