Departamento de Engenharia Informática Web Services 2014-15 Sistemas Distribuídos 1 Departamento de Engenharia Informática Primeiro objectivo: Serviços e aplicações de grande escala na Internet Usar de forma directa o HTTP e HTTPS como protocolos de transferência de informação • Conseguindo maior facilidade de passar através das firewalls Usar URL e URI como referências remotas para objectos 2014-15 Sistemas Distribuídos 2 Page 1 Seja eco-eficiente, evite imprimir-me 1 Departamento de Engenharia Informática Motivação dos Web Services (I) • Protocolo muito simples para garantir a interoperação entre plataformas de múltiplos fabricantes • Tratar todo o tipo de heterogeneidade de dados e informação com XML • Permitir utilizar RPC ou MOM (Message Oriented Middleware) – sistemas de comunicação síncronos e assíncronos 2014-15 Sistemas Distribuídos 10 Departamento de Engenharia Informática Motivação dos Web Services (II) • Usar de forma directa o HTTP e HTTPS como protocolos de transferência de informação – Conseguindo maior facilidade de passar através das firewalls • Usar URL e URI como referências remotas para objectos • Permitir a transferência de todo o tipo de informação – desde estruturas de dados a documentos estruturados e informação multimédia • Eliminar a distinção de sistemas para transferência de documentos e sistemas para transferência de dados 2014-15 Sistemas Distribuídos 11 Page 2 Seja eco-eficiente, evite imprimir-me 2 Departamento de Engenharia Informática Evolução • 1997 – A Sun distribui o JDK 1.1 que inclui o Remote Method Invocation (RMI) que define um modelo de computação distribuída usando objectos Java. O RMI é semelhante ao CORBA e ao DCOM mas funciona só com objectos Java. – Microsoft desenvolveu o COM+ sucessor do DCOM muito próximo do modelo CORBA. • 1999 – A SUN distribui o Java 2 Platform Entreprise Edition (J2EE) que integra o RMI e o IIOP tornando mais simples a interoperação de sistemas entre sistemas Java e CORBA. – O Simple Object Acess Protocol – SOAP apareceu pela primeira vez. • 2001 – A IBM e a Microsoft propõem as pilhas de protocolos dos Web Services à W3C (World Wide Web Consortium) • Wire stack • Description stack • Discovery stack 2014-15 Sistemas Distribuídos 12 Departamento de Engenharia Informática Dinâmica do Mercado • IBM – O produto principal é o Websphere que inclui o SOAP, WSDL, UDDI • Microsoft – .NET suporta directamente Web Services mas é muito mais abrangente – O biztalk suporta web services • Sun Microsystems – O suporte da Sun ao Java faz com que esta plataforma é uma das que incorpora a tecnologia Java Enterprise e os Web services. • Oracle: – Oracle 11g Web Service Broker. BPEL server, Oracle BPMS • SAP: – SAP XI, 2014-15 Sistemas Distribuídos 13 Page 3 Seja eco-eficiente, evite imprimir-me 3 Departamento de Engenharia Informática Uniform Resource Identifiers (URIs) • Standard de nomes de recursos na WWW • Sintaxe: [prefixo]:[sufixo-específico-do-protocolo] – Exemplos: – urn:isbn:0-486-27557-4 – https://www.ist.utl.pt/index.html – mailto:[email protected] • Duas funções distintas: – Identificar univocamente um recurso na internet • Chamados URNs (Uniform Resource Names) – e/ou – Localizar um recurso na internet • Chamados URLs (Uniform Resource Locator) 2014-15 Sistemas Distribuídos 14 Departamento de Engenharia Informática Porque podem ter sucesso os Web Services se os RPC falharam (??) • SOAP = só mais um protocolo de RPC – Muitos precursores: SunRPC, DCE, DCOM, Corba, … – Modelo Cliente Servidor – Todos iam transformar a informática das empresas, integrar os sistemas legados, … • Porque não o fizeram? • Especulação: – Não tinha uma interface Web (não eram aplicações a três níveis) – Poucas implementações open-source – O protocolo não era o mesmo entre o cliente PC (Microsoft) e o backend (IBM, Sun, VMS) – As redes empresariais eram locais, ligações à Internet limitadas 2014-15 Sistemas Distribuídos 17 Page 4 Seja eco-eficiente, evite imprimir-me 4 Departamento de Engenharia Informática Modelo dos Web Services (arquitectura básica) Name & Service description Service Registry Find Client Publish Service Service Requestor Service Provider Bind Request /Response 2014-15 Service description Sistemas Distribuídos 18 Departamento de Engenharia Informática Web Services (standards) Choreography - CDL4WS Orchestration - BPEL4WS Business Processes Management Transactions WS-Reliability WS-Security Coordination Quality of Service Context UDDI Discovery WSDL Description Description SOAP Message XML HTTP, JMS, SMTP 2014-15 Transport Sistemas Distribuídos 19 Page 5 Seja eco-eficiente, evite imprimir-me 5 Departamento de Engenharia Informática Arquitectura dos Web Services • Um serviço de Directório para registo e pesquisa dos serviços : UDDI (ou outros) • Páginas amarelas e directório (endereço, contactos, identificadores, categorizadores, ...) • Um protocolo de pedido/resposta para invocação do serviço: SOAP (ou outros) • Interacção • Uma especificação da interface do serviço WSDL 2014-15 • Contratos Sistemas Distribuídos 20 Departamento de Engenharia Informática Exemplo: Amazon Web Services • Permitem programar aplicações que usam serviços da Amazon através de Web Services – Vários serviços disponíveis para execução em cluster de grande escala • Exemplo de serviço: controlo de inventário e vendas para vendedores – Existe API que permite a clientes remotos: • Registar fornecimentos de produtos para armazéns da Amazon • Verificar estado dos fornecimentos • Consultar estado de vendas dos produtos fornecidos 2014-15 Sistemas Distribuídos 21 Page 6 Seja eco-eficiente, evite imprimir-me 6 Departamento de Engenharia Informática Exemplo: Composição de Web Services flight booking a flight booking b Travel Agent Service Client hire car booking a hire car bookingb hotel booking a 2014-15 hotel booking b Sistemas Distribuídos 22 Departamento de Engenharia Informática JAX – WS (sucessor do JAX-RPC) Integração dos Web Services com o ambiente Java 2014-15 Sistemas Distribuídos 23 Page 7 Seja eco-eficiente, evite imprimir-me 7 Departamento de Engenharia Informática Quando usar cada abordagem? Implementation-first • Oferecer (por Web Service) serviços já implementados • Construir novo web service de raiz sem ter de aprender a programar WSDL Contract-first • Programador conhecedor de WSDL que pretende ter elevado controlo sobre o que é especificado no contrato • Substituir a implementação de um web service existente por outro mantendo compatibilidade com clientes • Aderir a contrato definido por terceiros (e.g. protocolo definido por consórcio de organizações) 2014-15 Sistemas Distribuídos 25 Departamento de Engenharia Informática Exemplo Implementation-First Definição da interface do Web Service @WebService public interface Hello { @WebMethod String sayHello(String name); } 2014-15 Sistemas Distribuídos 26 Page 8 Seja eco-eficiente, evite imprimir-me 8 Departamento de Engenharia Informática Exemplo Implementation-First Implementação do Web Service @WebService(endpointInterface="example.ws.Hello") @WebServlet("/endpoint") public class HelloImpl implements Hello { public String sayHello(String name) { return "Hello " + name + "!"; } } 2014-15 Sistemas Distribuídos 27 Departamento de Engenharia Informática Cliente • O cliente pode ter um static proxy criado antes da execução (static stub) – Compilado a partir do WSDL pelo wsimport • O cliente pode também usar um dynamic proxy – Classe que é criada durante a execução a partir do WSDL 2014-15 Sistemas Distribuídos 30 Page 9 Seja eco-eficiente, evite imprimir-me 9 Departamento de Engenharia Informática Cliente com Stub • Um stub nunca é distribuído aos clientes • O stub implementado em Java só é relevante para o run-time do JAX-WS e não é portável para outros ambientes • O stub é específico para um protocolo de transporte • Com um stub o cliente não precisa do WSDL em tempo de execução 2014-15 Sistemas Distribuídos 31 Departamento de Engenharia Informática JAX-WS: Arquitectura Web Container (e.g. JBoss) Service Client Stub WSDL description Service Endpoint Stub (Tie) Dispatch JAX-WS API Client Side JAX-WS Runtime System WSDL <-> Java Mapping JAX-WS API Server Side JAX-WS Runtime System Message Protocol - SOAP Transport Protocol – HTTP, etc 2014-15 Sistemas Distribuídos 32 Page 10 Seja eco-eficiente, evite imprimir-me 10 Departamento de Engenharia Informática Cliente com Stub estático: Exemplo public static void main(String[] args) { HelloImplService service = new HelloImplService(); Hello port = service.getHelloImplPort(); String result = port.sayHello("friend"); System.out.println(result); } Stub, gerado previamente com ferramenta wsimport 2014-15 Sistemas Distribuídos 33 Departamento de Engenharia Informática JAX-WS: Arquitectura Código do programador Código do programado r Artefactos gerados pelo wsimport (stubs, etc) Artefactos gerados pelo wsimport (stubs, etc) 2014-15 Servlet recebe pedidos HTTP e invoca a operação correspondente da implementação do Web Service Sistemas Distribuídos 35 Page 11 Seja eco-eficiente, evite imprimir-me 11 Departamento de Engenharia Informática Cliente: invocação dinâmica • Invocação “semi-dinâmica” (dynamic proxy) – Classe criada durante a execução a partir do WSDL que se obtém na altura – Antes da execução, apenas a interface abstracta do serviço é conhecida (correspondendo a uma interface Java) • Invocação dinâmica (dynamic invocation interface,DII) – O cliente em tempo de execução utiliza o WSDL para construir a invocação – Antes da execução, nem interface abstracta nem concreta do serviço são conhecidas 2014-15 Sistemas Distribuídos 38 Departamento de Engenharia Informática Exemplo: Cliente com dynamic proxy public static void main(String[] args) throws Exception{ String namespace = “http://www.flutebank.com/xml”; String wsldport “BillPayPort”; String wsdlservice = “Billpayservice”; String wsdllocation=“http://127.O.O.1:8080/billpayservice/billpayservice.wsdl”; URL wsldurl = new URL(wsdllocation); ServiceFactory factory = ServiceFactory.newlnstance(); Service service = factory.createService( wsldurl, new QName(namespace, wsdlservice)); //make the call to get the stub corresponding to this service and interface BillPay stub (BillPay) service.getPort( new QName(namespace,wsldport), BillPay.class); // invoke methods on the service double lastpaid= stub.getLastPayment (“my cable tv provider”); System.out.println(“Last payment was” + lastpaid); } } 2014-15 Sistemas Distribuídos 40 Page 12 Seja eco-eficiente, evite imprimir-me 12 Departamento de Engenharia Informática Exemplo: Cliente com invocação dinâmica (DII) public class DIIClient_WSDL{ public static void main(String[] args) throws Exception { String wsdllocation = http://127.O.O.1:9090/billpayservice/billpayservice.wsdl”; String namespace = “http://www.flutebank.com/xml”; String serviceName = “Billpayservice”; ServiceFactory factory = ServiceFactory.newlnstanceQ; Service service = (Service) factory.createService ( new URL(wsdllocation), new QName(namespace,serviceName)); QName portName = new QName(namespace,”BillPayPort”); QName operationName = new QName(namespace”getLastPayment”); Call call = service.createCall(portName, operationName); Object[] params = {“my cable tv provider”}; Object lastpaid = (Double)call.invoke(params); System.out.println(”Last payment was” + lastpaid); 2014-15 Sistemas Distribuídos } 41 Departamento de Engenharia Informática JAX-WS Handlers • Handler – Estende a classe javax.xml.ws.handler.Handler – Métodos relevantes: • handleRequest(MessageContext context) • handleResponse(MessageContext context) • handleFault(MessageContext context) • Handler Chain – Sequência de handlers executados sobre pedidos e respostas 2014-15 Sistemas Distribuídos 42 Page 13 Seja eco-eficiente, evite imprimir-me 13 Departamento de Engenharia Informática Simple Object Access Protocol SOAP Protocolo de comunicação dos Web Services 2014-15 Sistemas Distribuídos 44 Departamento de Engenharia Informática Simple Object Access Protocol - SOAP Objectivo • Ubiquitous XML distributed computing infrastructure Características • Protocolo de comunicação distribuído permitindo o envio de qualquer tipo de informação entre aplicações • Define o protocolo de pedido resposta – estrutura das mensagens e da interacção entre cliente e servidor • O protocolo de representação de dados baseado em XML. • Referências remotas baseadas em URI • Protocolo extensível permitindo a incorporação de várias facetas : segurança, tolerância a faltas, através de headers associados às mensagens 2014-15 Sistemas Distribuídos 45 Page 14 Seja eco-eficiente, evite imprimir-me 14 Departamento de Engenharia Informática Wire stack – Visão dos Web Services XML Messaging XML and SOAP Data Encoding HTTP(S), SMTP, FTP, sockets. Quality of Service SOAP Manageability Envelope Extensions Security SOAP Headers Network Protocol 2014-15 Sistemas Distribuídos 46 Departamento de Engenharia Informática SOAP Simple Object Access Protocol SOAP 1.1 Message Structure • Define: SOAP Envelope – Modelo de empacotamento Header Entries [Header Element] • SOAP Envelope • Baseado em XML • Pode usar vários transportes: Body Element – HTTP – SMTP – ... [Fault Element] 2014-15 Sistemas Distribuídos 47 Page 15 Seja eco-eficiente, evite imprimir-me 15 Departamento de Engenharia Informática Interacções previstas no SOAP one-Way Client Server Client Server Client Server Client Server Mensagem simples request-response RPC Notification callback notification-response 2014-15 Sistemas Distribuídos 48 Departamento de Engenharia Informática Execução simples em SOAP • É necessário um URL de destino • O nome de uma operação • Os parâmetros. – Os parâmetros são passados por cópia (in e out) – Não existem referências para os objectos remotos criadas automaticamente como em Java RMI • Informação contextual, como a informação de segurança 2014-15 Sistemas Distribuídos 49 Page 16 Seja eco-eficiente, evite imprimir-me 16 Departamento de Engenharia Informática Binding de SOAP sobre HTTP SOAP - Pedido O que há de específico deste transporte? POST /ExemploHelloWS/endpoint HTTP/1.1 Host: www.server.com Content-Type: text/xml; charset="utf-8" Content-Length: 322 SOAPAction: "" Envelope SOAP com pedido <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hello"> <soapenv:Body> <ns1:sayHello> <ns1:name>friend</ns1:name> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope> 2014-15 Sistemas Distribuídos 50 Departamento de Engenharia Informática SOAP - Resposta HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: 367 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hello"> <soapenv:Body> <ns1:sayHelloResponse ns1:sayHelloResponse> ns1:sayHelloResponse <ns1:return>Hello friend!</ns1:return> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope> 2014-15 Sistemas Distribuídos 51 Page 17 Seja eco-eficiente, evite imprimir-me 17 Departamento de Engenharia Informática Exemplo • Servidor que disponibiliza o último preço praticado para um produto • Função Remota float GetLastTradePrice(string symbol) 2014-15 Sistemas Distribuídos 52 Departamento de Engenharia Informática Soap - Pedido POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8“ Content-Length: nnnn SOAPAction: "Some-URI“ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS</symbol> </m:GetLastTradePrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 2014-15 Sistemas Distribuídos 53 Page 18 Seja eco-eficiente, evite imprimir-me 18 Departamento de Engenharia Informática SOAP - Resposta HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8“ Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> <SOAP-ENV:Body> <m:GetLastTradePriceResponse GetLastTradePriceResponse xmlns:m="Some-URI"> <Price Price>34.5</Price> Price </m:GetLastTradePriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 2014-15 Sistemas Distribuídos 54 Departamento de Engenharia Informática Binding do SOAP ao protocolo de Transporte • O HTTP é um protocolo de pedido-resposta, o que torna o protocolo de RPC do SOAP muito simples – Para outros protocolos tem de se criar um protocolo de controlo da invocação remota • O HTTP permite que o servidor não tenha estado • A confidencialidade da informação pode ser assegurada pelo HTTP/S 2014-15 Sistemas Distribuídos 55 Page 19 Seja eco-eficiente, evite imprimir-me 19 Departamento de Engenharia Informática SOAP - Erro HTTP/1.0 500 Internal Server Error Content-Type: text/xml; charset=”utf-8” Content-Length: nnn <SOAP - ENV: Envelope xmlns:SOAP-ENV=”http//schemas.xmlsoap.org/soap/enve1ope/” SOAP-ENV:encodingStyle=”http//schemas.xmlsoap.org/soap/encoding/”> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>Client .AuthenticationFailure</faultcode> <faultstring>Failed to authenticate client</faultstring> <faultactor>urn:X-SkatesTown:PartnerGateway</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 2014-15 Sistemas Distribuídos 56 Departamento de Engenharia Informática Physical (Communication Protocol) Message POST /LookupCentral HTTP/1.1 Host: www.lookupcentralserver.com Content-Type: text/xml; charset=“utf-8” Content-Length: nnn SOAPAction: “Directory/LookupPerson” Out-of-message context (target URI) Out-of-message context (SOAPAction) Logical SOAP Message <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/” SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/”/> SOAP Headers <SOAP-ENV:Header> In-message context <a: AuthorizationLevel> xmls:a=“some-URI”> </a:AuthorizationLevel> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:LookupPerson xmlns:m=“Some-URI”> <FirstName>Big<FirstName> <LastName>Boss</LastName> </m:LookupPerson> </SOAP-ENV:body> SOAP Body </SOAP-ENV:Envelope> 2014-15 Sistemas Distribuídos 57 Page 20 Seja eco-eficiente, evite imprimir-me 20 Departamento de Engenharia Informática eXtensible Markup Language XML Resolver a heterogeneidade na comunicação e nos dados de forma universal 2014-15 Sistemas Distribuídos 61 Departamento de Engenharia Informática Arquitectura de Integração da Informação • Em muitos casos a integração tem de resolver o problema da troca de informação com múltiplas representações • A solução mais simples para este problema é representar os dados num formato canónico que todos sabiam utilizar • Os dados originais de cada sistema têm de ser mapeado no formato canónico mas depois podem ser usados por todos que sigam o formato. • Se o formato canónico tiver uma representação explicita as mensagens deixam de ter se ser construídas pela ordem estrita de invocação, pode verificar-se se estão de acordo com o esperado, podem ser analisadas por ferramentas independentes do RPC • Esta é a razão da grande importância do XML 2014-15 Sistemas Distribuídos 62 Page 21 Seja eco-eficiente, evite imprimir-me 21 Departamento de Engenharia Informática eXtensible Markup Language (XML) • Deriva de uma linguagem muito mais antiga para definição do formato de impressão de documentos, o SGML – O SGML já tinha sido a tecnologia de base no desenvolvimento do HTML. • Essencialmente o XML permite através de etiquetas (tags) associar a descrição do formato aos dados de um documento. • Toda a descrição é textual – Resolve muito dos problemas de portabilidade. • O XML é uma proposta do W3C – Percepcionado como o substituto dos formatos anteriores de representação de dados como o EDI 2014-15 Sistemas Distribuídos 63 Departamento de Engenharia Informática Importância do XML O XML trabalha sobre documentos Os documentos podem ser usados para múltiplos fins: • Representar/apresentar a informação num forma visível: em papel ou transformada para html • Comunicação de dados entre plataformas heterogéneas • Para armazenamento da informação em ficheiros ou em bases de dados 2014-15 Sistemas Distribuídos 64 Page 22 Seja eco-eficiente, evite imprimir-me 22 Departamento de Engenharia Informática Sintaxe XML • Regras de construção simples mas rígidas: – – – – Existe um elemento raiz único Todos os elementos têm que fechar Fecham pela ordem inversa em que abrem Os nomes são case-sensitive • Um documento que respeita as regras diz-se bem formado (well formed) • Adicionalmente, pode-se definir uma gramática para validar documentos XML – Que sequências de elementos são válidas – Que tipo de dados contém o elemento 2014-15 Sistemas Distribuídos 65 Departamento de Engenharia Informática Exemplo de uma estrutura de dados em XML <?xml version=“1.0” encoding =“UTF-8”?> <!– este documento define uma lista de empregados --> <employeeList xmlns="http://www.company.org/Emp”> <employee type=“contract”> <employee_id>75868</employee_id> <name> <first_name>John</first_name> <last_name>Doe</last_name> </name> <extn>27304</extn> <dept>1104332089</dept> <email>[email protected]</email> </employee> </employeeList> 2014-15 Sistemas Distribuídos employeeList 66 Page 23 Seja eco-eficiente, evite imprimir-me 23 Departamento de Engenharia Informática Benefícios do XML • Tecnologia não proprietária • Independente das plataformas – o formato é texto • Compatível com o HTTP – O XML tem uma sintaxe mais restritiva que o HTML, mas pode ser usado como o HTML pelo que passa pelas firewalls • Internacional – Formato texto que usa UTF-8 ou UTF-16 para representar os caracteres • Extensível – Novas tags podem ser adicionadas por necessidade de extensão. – Para evitar duplicações existem namespaces a que um documento pode ser associado. 2014-15 Sistemas Distribuídos 67 Departamento de Engenharia Informática Benefícios do XML(II) • A interpretação das mensagens depende de tags e não da posição do campo na mensagem • Permite a transformação automática dos dados – As transformações são especificadas usando XML Stylesheet Language Transformatiom (XSLT) • Auto definida – A estrutura de um documento XML tem uma meta-descrição com base Document Type Definition (DTD) ou actualmente com XML schema • Ferramentas genéricas – Ferramentas Open Source em Java e ferramentas já existentes para SGML. 2014-15 Sistemas Distribuídos 68 Page 24 Seja eco-eficiente, evite imprimir-me 24 Departamento de Engenharia Informática Tecnologia XML • Namespaces – Permite a unicidade de nomes e resolver colisões. Os Espaços de nomes são normalmente associados a um domínio de aplicação – Um nome torna-se único por associação a um URI • Xpath – Define um mecanismo de acesso a elementos dentro de um documento XML • Xlink – Mecanismo para indexar outros documentos semelhantes aos hiperlinks do HTML mas mais robusto • XSL – XML style sheet- documentos XML que definem transformações de documentos em XML • DOM - Document Object Model – O DOM define os métodos para aceder a um documento XML. Pressupõe que o documento é carregado em memória e que através de uma API se acede aos diferentes elementos • SAX - Simple API for XML – O SAX é um parser que invoca funções à medida que encontra elementos no documento 2014-15 Sistemas Distribuídos 70 Departamento de Engenharia Informática Exemplo simples – mensagem Com definição de namespace <mensagem xmlns="urn:empresa.pt:mensagem" id="74536"> <!-- isto é um comentário --> <de>João</de> <para>Carla</para> <assunto>Reunião</assunto> <texto>Confirmo a reunião dia 6</texto> </mensagem> 2014-15 Sistemas Distribuídos 71 Page 25 Seja eco-eficiente, evite imprimir-me 25 Departamento de Engenharia Informática eXtensible Stylesheet Language (XSL) • Permite: – – – – Transformar XML em HTML Transformar XML noutro XML Filtrar e ordenar dados XML Apresentar o mesmo documento de formas diferentes dependendo do dispositivo de destino (ecrã, impressão, telefone móvel, etc.) 2014-15 Sistemas Distribuídos 72 Departamento de Engenharia Informática Esquema do Documento • A especificação de documentos era inicialmente efectuada em DTD – Document Type Definition • Em 2001 foi proposto o XML Schema – Estende as capacidades do DTD mas cuja principal vantagem é ter uma sintaxe XML que o DTD não tinha • Um parser usando um DTD ou XML Schema pode verificar se o documento está sintacticamente correcto e se está conforme com um determinado tipo • A meta-descrição pode ser incluída no documento, mas a utilização mais interessante é poder aceder-lhe através de um URI partilhando-o entre aplicações 2014-15 Sistemas Distribuídos 73 Page 26 Seja eco-eficiente, evite imprimir-me 26 Departamento de Engenharia Informática Comparação XML Schema e DTD • DTD era anterior ao XML pelo que não suporta bem alguns aspectos da norma como por exemplo os namespaces • O DTD tinha por objectivo descrever documentos legíveis por humanos e não documentos para representar dados, por conseguinte faltam-lhe alguns construções para exprimir diversas restrições simples, – ex.: idade só pode ter um valor não negativo entre 0 e 150 • A sintaxe do DTD não é a do XML o que torna mais complexas as ferramentas 2014-15 Sistemas Distribuídos 74 Departamento de Engenharia Informática DTD Simples para o documento employeeList <!DOCTYPE employeeList [ <!ELEMENT employeeList (employee*)> Element emplyeeList consists of zero or more employee elements. NOTE: “*” = zero or more, “?”= zero or one, “+”= one or more <!ELEMENT employee (employee_id, name, extn, dept, email)> Element employee contains elements employee_id, name, dept, and email. <!ATTLIST emplyee type (perm|contract) #REQUIRED> Attribute type for element employee is required and must have either of these two values: contract or perm. <!ELEMENT employee_id (#PCDATA)> <!ELEMENT NAME (first_name, last_name)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT extn (#PCDATA)> <!ELEMENT dept (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> 2014-15 Sintaxe próxima das expressões Element dept. may containregulares any parsable character data (PCData). Sistemas Distribuídos 75 Page 27 Seja eco-eficiente, evite imprimir-me 27 Departamento de Engenharia Informática XML Schema para o documento employeeList </xml version=“1.0” encoding=“UTF-8”?> <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema targetNamespace=“http://www.flute.com“ xmlns=“http://www.flute.com“> Namespace declaration <!ELEMENT employeeList (employee*)> <xsd:element name=“employeeList”> <xsd:complexType> <xsd:sequence> <xsd:element ref=“employee” minOccurs=“1” maxOccurs=“unbounded”/> <xsd:seuqence> </xsd:complexType> </xsd:element> <xsd:element name=“employee” <xsd:complexType> <xsd:sequence> <xsd:element ref=“employee_id” minOccurs=“1” maxOccurs=“1”/> <xsd:element ref=“name” minOccurs=“1” maxOccurs=“1”/> <xsd:element ref=“extn” minOccurs=“1” maxOccurs=“1”/> <xsd:element ref=“dept” minOccurs=“1” maxOccurs=“1”/> <xsd:element ref=“email” minOccurs=“1” maxOccurs=“1”/> </xsd:sequence> <xsd:attributeGroup ref=“employeeAttribute”/> </xsd:comlexType> </xsd:element> <!ELEMENT employee (employee_id, name, extn, dept, email)> <!ELEMENT name (first_name, last_name)> <xsd:element name=“name” <xsd:complexType> <xsd:sequence> <xsd:element ref=“first_name” minOccurs=“1” maxOccurs=“1”/> <xsd:element ref=“last_name” minOccurs=“1” maxOccurs=“1”/> <xsd:sequence> </xsd:complexType> </xsd:element> 2014-15 Sistemas Distribuídos 76 Departamento de Engenharia Informática <xsd:element name=“employee_id”> <xsd:simpleType> <xsd:restriction base=“xsd:int”> <xsd:minlnclusive value=“1”/> <xsd:maxlnclusive value=“100000”/> <xsd:restriction> </xsd:simpleType> </xsd:element> employee:_id must be an integer between 1 and 100,000. <xsd:element name=“first_name” type=“xsd:string”/> <!ELEMENT first_name (PCDATA)> <xsd:element name=“last_name” type=“xsd:string”/> <xsd:element name=“email” type=“xsd:string”/> <!ELEMENT email (PCDATA) <xsd:element name=“dept” > <xsd:simpleType> <xsd:restriction base=“xsd:string> Department must be specified in the form: “999-999-9999”. <xsd:pattern value=“[0-9]{3}-[0-9]{3}-[0-9]{4}”/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name=“extn”> <xsd:simpleType> <xsd:restrition base=“xsd:string”> <xsd:pattern value=“[0-9]{5}”/> </xsd:restrition> </xsd:simpleType> </xsd:element> Extension must be specified in the form “99999” (String consisting of five digits). <xsd:attributeGroup name0”employeeAttribute”> <xsd:attribute name=“type” use=“required”> <xsd:simpleType> <xsd:restriction base=“xsd:string”> <xsd:enumerator value=“contract”/> <!ATTLIST employee type (permicontract) #REQUIRED> 2014-15 Sistemas Distribuídos 77 Page 28 Seja eco-eficiente, evite imprimir-me 28 Departamento de Engenharia Informática XML Schema • Define – Elementos obrigatórios e proibidos – Estrutura hierárquica dos elementos – Atributos necessários ou opcionais dos elementos e gama de valores permitidos – Referências de parte de um documento a outros elementos do documento 2014-15 Sistemas Distribuídos 78 Departamento de Engenharia Informática Tecnologia XML 79 2014-15 Sistemas Distribuídos 79 Page 29 Seja eco-eficiente, evite imprimir-me 29 Departamento de Engenharia Informática SAX – Simple API for XML • Processamento em série • Baseado no tratamento de eventos 2014-15 Sistemas Distribuídos 80 Departamento de Engenharia Informática Quando usar • Quando pretendemos processar informação em série (data stream). • A informação a processar não precisa de manter estado. • Importação/exportação de dados 2014-15 Sistemas Distribuídos 81 Page 30 Seja eco-eficiente, evite imprimir-me 30 Departamento de Engenharia Informática DOM - Document Object Model • Manipulação de árvore em memória 2014-15 Sistemas Distribuídos 82 Departamento de Engenharia Informática WSDL - Web Service Definition Language Definição do contrato do Serviço 2014-15 Sistemas Distribuídos 83 Page 31 Seja eco-eficiente, evite imprimir-me 31 Departamento de Engenharia Informática WSDL - Web Service Definition Language • A IDL para descrição dos contratos em Web Services • Define o contrato a que o serviço se obriga • A definição permite descrever – – – – Qual o serviço Que mensagens devem ser enviadas e qual a sua estrutura Como usar os vários protocolos de transporte Onde o serviço está localizado, mais precisamente para que rede a mensagem deve ser enviada Diferenças vs IDL de RPC? 2014-15 Sistemas Distribuídos 84 Departamento de Engenharia Informática WSDL Web Services Description Language Interface Abstracta WSDL 1.1 Document Structure WSDL Document [Types] {Messages} Interface Concreta {Port Types} 2014-15 {Bindings} {Services} Sistemas Distribuídos 86 Page 32 Seja eco-eficiente, evite imprimir-me 32 Departamento de Engenharia Informática WSDL information model part type abstract interface portType (abstract) message (abstract) operation concrete implementation binding (concrete) message (concrete) message Made concrete by service concrete endpoint port Contains zero or more 2014-15 Sistemas Distribuídos 87 Departamento de Engenharia Informática WSDL Web Services Description Language • O contrato WSDL indica quais as operações disponibilizadas pelo Web Service aos seus clientes • O conjunto das operações é designado por interface • Para cada operação, especifica os argumentos (inputs), os resultados (outputs) e os erros (faults). • Os tipos de dados dos argumentos, resultados e erros são descritos com esquemas XSD • O contrato WSDL não é fácil de ler – É extenso – A sua organização está invertida – Tem múltiplas dependências 2014-15 Sistemas Distribuídos 88 Page 33 Seja eco-eficiente, evite imprimir-me 33 Departamento de Engenharia Informática Definições • Port Type – Descreve a interface abstracta de um Web service. – Atenção porque o termo “port” é usado com um sentido totalmente diferente dos sockets. Um port de um Web Service é semelhante a uma interface Java • message – assinatura das operações descrevendo o nome e os parâmetros da operação • types – colecção de todos os tipos de dados usados na especificação. • Estes elementos são reutilizáveis porque definem entidades abstractas e não a concretização de um serviço 2014-15 Sistemas Distribuídos 91 Departamento de Engenharia Informática portType <portType name=”PriceCheckPortType”> <operation name=”checkPrice”> <input message=”pc:PriceCheckRequest”/> <output message=”pc:PriceCheckResponse”/> </operation> </portType> • Descreve o que o Serviço faz • As mensagens permitem saber a assinatura dos métodos • Normalmente um documento WSDL contem apenas um port type por razões de reutilização 2014-15 Sistemas Distribuídos 92 Page 34 Seja eco-eficiente, evite imprimir-me 34 Departamento de Engenharia Informática Mensagens <! - - Message definitions - -> <! - - A PriceCheckRequest is simply an item code (sku) - -> <message name=”PriceCheckRequest”> <part name=”sku” type=”xsd:string”/> </message> <! - - A PriceCheckResponse consists of an availability structure, - - > <! - - defined above. <message name=”PriceCheckResponse”> <part name=”result” type=”avail:availabilityType”/> </message> • As mensagens podem ser de input, output ou assinalar faltas • podem ser usadas para diferentes operações 2014-15 Sistemas Distribuídos 93 Departamento de Engenharia Informática Tipos de dados <types> <xsd:schema targetNamespace=http://www.skatestown.com/ns/availability xmlns:xsd=http://www.w3.org/2001/XMLSchema> <xsd:complexType name=”availabilityType”> <xsd:sequence> <xsd:element name=”sku” type=”xsd:string”/> <xsd:element name=”price” type=”xsd:double”/> </xsd:sequence> </xsd:complexType> </xsd:schema> </types> • Tipos utilizados no documento WSDL • Os tipos são declarados num XML schema 2014-15 Sistemas Distribuídos 94 Page 35 Seja eco-eficiente, evite imprimir-me 35 Departamento de Engenharia Informática Binding • A função do binding é tornar concreto o serviço definindo a forma como funciona • Exemplos: – Protocolo de transporte: SOAP; HTTP; SMTP – Valor do Soap action – Formatação da mensagem • Um portType pode ter um mais bindings associados, mas cada documento WSDL normalmente só tem um. 2014-15 Sistemas Distribuídos 95 Departamento de Engenharia Informática Exemplo de binding para HTTP <binding name=”PriceCheckSOAPBinding” type=”pc:PriceCheckPortType”> <soap:binding style=”rpc” transport=http://schemas.xmlsoap.org/soap/http/> <operation name=”checkPrice”> <soap:operation soapAction=” “/> <input> <soap:body use=”encoded” namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org./soap/encoding/”/> </input> <output> <soap:body use=”encoded” namespace= http://www.skatestown.com/services/PriceCheck encodingStyle= http://schemas.xmlsoap.org/soap/encoding//> </output> </operation> </binding> 2014-15 Sistemas Distribuídos 96 Page 36 Seja eco-eficiente, evite imprimir-me 36 Departamento de Engenharia Informática Exemplo de binding para SMTP <!- - Binding definitions - -> <binding name=“PriceCheckSMTPBinding” type=“pc:PriceCheckPortType”> <soap:binding style= “document” Transport= “http://schemas.xmlsoap.org/soap/smtp”/> <operation name=“checkPrice”> <input> <soap:body use=“literal”/> </ input> <output> <soap:body use=“literal”/> </ output> </ operation> </ binding> 2014-15 Sistemas Distribuídos 97 Departamento de Engenharia Informática Exemplo de opções no binding RPC/encoded document/literal document/encoded RPC/literal 2014-15 Sistemas Distribuídos 98 Page 37 Seja eco-eficiente, evite imprimir-me 37 Departamento de Engenharia Informática Port <! - - Service definition - -> <service name=”PriceCheckService”> <port name=”PriceCheck” binding=”pc:PriceCheckSOAPBinding”> <soap:address location= http://localhost:8080/axis/services/PriceCheck/> </port> </service <! - - Service definition - - > <service name=“PriceCheckSMTPService”> <port name=“PriceCheckSMTP” binding=“PriceCheckSMTPBinding”> <soap:address location= “mailto:[email protected]”/ </ port> </ service> • Define o endereço da rede da rede onde o Web service é disponibilizado. • Se existirem vários bindings são definidos vários ports – exemplo para http ou o endereço de email para SMTP 2014-15 Sistemas Distribuídos 99 Departamento de Engenharia Informática Modelo dos Web Services (arquitectura básica) Service Registry Name & Service description Find Client Publish Service Service Requestor Bind Request /Response 2014-15 Sistemas Distribuídos Service Provider Service description 104 Page 38 Seja eco-eficiente, evite imprimir-me 38 Departamento de Engenharia Informática Universal Description Discovery & Integration (UDDI) • Definição de um conjunto de serviços que suportam a descrição e a localização de: – Entidades que disponibilizam Web Services (empresas, organizações) – Os Web Services disponibilizados – As interfaces que devem ser utilizadas para aceder aos Web Services • Baseada em standards Web: HTTP, XML, XML Schema, SOAP 2014-15 Sistemas Distribuídos 105 Departamento de Engenharia Informática Informação representada na UDDI • A UDDI permite pesquisar informação muito variada sobre os Web Services. Ex: – Procurar Web Services que obedeçam a uma determinada interface abstracta – Procurar Web Services que estejam classificados de acordo com um esquema conhecido de classificação – Determinar os protocolos de transporte e segurança suportados por um determinado Web Service – Procurar Web Services classificados com uma palavra-chave • O acesso é via as API definidas mas os operadores também disponibilizam sites para acesso via web 2014-15 Sistemas Distribuídos 106 Page 39 Seja eco-eficiente, evite imprimir-me 39 Departamento de Engenharia Informática Modelo estrutural da informação businessEntity businessServices human readable businessServices information about the publisher key 2014-15 businessServices bindingTemplate human readable bindingTemplate information URL bindingTemplate about a information family of services about the URL serviceinterfaces interfaces service key URL key tModel tModel tModel service descriptions Sistemas Distribuídos 107 Departamento de Engenharia Informática Modelo estrutural da informação • businessEntity: descreve uma empresa ou organização que exporta Web Services – A informação encontra-se conceptualmente dividida em: – Páginas brancas – informação geral de contacto – Páginas amarelas – Classificação do tipo de serviço e localização – Páginas verdes – Detalhes sobre a invocação do serviço • businessService: descreve um conjunto de Web Services exportado por uma businessEntity • bindingTemplate: descreve a informação técnica necessária para usar um determinado serviço • tModel: descreve o “modelo técnico” de uma entidade reutilizável, como um tipo de Web Service, o binding a um protocolo usado por um Web Service, etc. 2014-15 Sistemas Distribuídos 108 Page 40 Seja eco-eficiente, evite imprimir-me 40 Departamento de Engenharia Informática Taxionomia • Os serviços registados devem ser categorizados em taxionomias que os permitam pesquisar • Existem várias taxionomias normalizadas, ex.: – ISO 3166 – geografias – D-U-N-S – Data Universal Numbering System – Dun&Bradstreet – UN/SPSC- produtos e serviços – ONU • O UDDI permite que todas as entidades sejam classificadas • As pesquisas podem usar múltiplas classificações • Para uso interno das organizações podem ser definidos os seus esquemas de classificação. Ex.: qualidade de serviço do fornecedor do web service 2014-15 Sistemas Distribuídos 109 Departamento de Engenharia Informática Arquitectura UDDI - Registries • Um Registry é composto por um ou mais nós UDDI • Os nós de um Registry gerem colectivamente um conjunto bem definido de dados UDDI. Tipicamente, isto é suportado com replicação entre os nós do Registry • A representação física de um Registry é deixada à escolha das implementações 2014-15 Sistemas Distribuídos 110 Page 41 Seja eco-eficiente, evite imprimir-me 41 Departamento de Engenharia Informática Registry Server privado • Gere a base de dados com os registos UDDI • Modos de acesso – Aplicações JAX-R – Registry Browser – Xindice • Interfaces – API – Acesso directo aos registos 2014-15 Sistemas Distribuídos 111 Departamento de Engenharia Informática Discovery Stack • Protocolo de ligação ou binding entre o cliente e o servidor. • Os fornecedores dos serviços publicam a respectiva interface • O protocolo de inspecção permite verificar se um dado serviço existe baseado na sua identificação • O UDDI responde às questões – Onde é que o Web service está localizado? – Qual o processo de negócio que o serviço disponibiliza • O UDDI permite encontrar o serviço baseado na sua definição – capability lookup 2014-15 Sistemas Distribuídos 112 Page 42 Seja eco-eficiente, evite imprimir-me 42 Departamento de Engenharia Informática JAX-R API Estruturas de dados • O JAX-R tem um modelo de dados muito próximo do standard UDDI – O mapeamento de um para outro é quase directo – Só mudam alguns nomes • Pacote de classes que implementam o modelo de dados: – 2014-15 javax.xml.registry.infomodel Sistemas Distribuídos 113 Page 43 Seja eco-eficiente, evite imprimir-me 43